在Perl語言後綴條件運算符可以寫類似在F#
someFunction() if $x == 0
即在後綴符號適用條件。
我確定在F#中必須有類似的表達類型,因爲它在處理函數時非常靈活。但是,當我嘗試寫
someFunction() if x = 0
或
someFunction() << if x = 0
我收到預期的錯誤消息。有沒有辦法在F#中實現更多或更少的一般postfix條件運算符?
在Perl語言後綴條件運算符可以寫類似在F#
someFunction() if $x == 0
即在後綴符號適用條件。
我確定在F#中必須有類似的表達類型,因爲它在處理函數時非常靈活。但是,當我嘗試寫
someFunction() if x = 0
或
someFunction() << if x = 0
我收到預期的錯誤消息。有沒有辦法在F#中實現更多或更少的一般postfix條件運算符?
對此沒有內置的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()
更醜陋 - 但它是一個有趣的事情,試驗:-)
謝謝托馬斯,這確實有竅門。附:讓我感謝你的真實世界功能編程書,這真棒。 – Rustam
我在想什麼就像'let iif condition call prms = if condition then call prms else() '但我不能插入任何東西) – Rustam