2016-10-03 82 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

哇,這是我真正需要的語法!謝謝! –