在 Perl 语言中,可以编写类似的东西
someFunction() if $x == 0
即以后缀表示法应用条件。
我确信 F# 中一定有类似类型的表达式,因为它在处理函数时非常灵活。但是当我尝试写
someFunction() if x = 0
或者
someFunction() << if x = 0
我收到预期的错误消息。有什么方法可以在 F# 中实现或多或少的通用后缀条件运算符?
在 Perl 语言中,可以编写类似的东西
someFunction() if $x == 0
即以后缀表示法应用条件。
我确信 F# 中一定有类似类型的表达式,因为它在处理函数时非常灵活。但是当我尝试写
someFunction() if x = 0
或者
someFunction() << if x = 0
我收到预期的错误消息。有什么方法可以在 F# 中实现或多或少的通用后缀条件运算符?
没有内置的 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()
——但试验起来很有趣:-)