2016-10-03 47 views
4

我手上下面一段代码F#图案相似的分支比空,我应该做完全相同的分支打印一些文本并返回。但是我不知道如何在F#中做这样的条件表达式,以便我可以共享同一个分支。在命令式编程中,我会很轻松地做到这一点,但在F#中,我该怎么做?如何“压缩”在匹配

谢谢

+0

什么是'x'的类型在'Some x'中? –

+0

这是一种称为“交集”的类型,其中包含一个称为状态和位置的成员。这里的定义,虽然我不认为这是相关的: 类型Intersection = { 可变状态:状态; Position:Position } –

回答

11

如果Status是记录字段,那么你可以这样做:

match intersection with 
| Some { Status = Empty } -> 
    // Code for empty... 
| _ -> 
    printfn "Please provide an empty intersection for ring placement" 
    gameState 

否则,您可以使用保护:

match intersection with 
| Some x when x.Status = Empty -> 
    // Code for empty... 
| _ -> 
    printfn "Please provide an empty intersection for ring placement" 
    gameState 
+0

在你的第一个代码示例中,如果我需要“Some”(在我的情况下是x)内的内容呢? –

+5

你可以做'Some({Status = Empty} as x)' – Tarmil

+0

哇,这是我真正需要的语法!谢谢! –