2013-12-17 50 views
4

在Perl語言後綴條件運算符可以寫類似在F#

someFunction() if $x == 0 

即在後綴符號適用條件。

我確定在F#中必須有類似的表達類型,因爲它在處理函數時非常靈活。但是,當我嘗試寫

someFunction() if x = 0 

someFunction() << if x = 0 

我收到預期的錯誤消息。有沒有辦法在F#中實現更多或更少的一般postfix條件運算符?

+0

我在想什麼就像'let iif condition call prms = if condition then call prms else() '但我不能插入任何東西) – Rustam

回答

6

對此沒有內置的F#支持,所以我建議只使用普通的前綴樣式條件(或模式匹配)。在社區中也沒有標準的操作者/功能,所以慣用的風格只會使用普通的if

我認爲你能做的最好的是這樣的:

/// Evaluates lazy value only if the specified boolean holds 
let assuming b (v:Lazy<_>) = if b then v.Value 

// Print foo only when x > 40 
let foo() = printfn "hi" 
let x = 42 
lazy foo() |> assuming (x > 40) 

注意,我不得不添加lazy表達式(以確保它當條件不成立實際上並沒有評估) 。這是有效的,但它肯定比編寫if x>40 then foo()更醜陋 - 但它是一個有趣的事情,試驗:-)

+3

謝謝托馬斯,這確實有竅門。附:讓我感謝你的真實世界功能編程書,這真棒。 – Rustam