在Perl语言中,可以编写类似
的内容someFunction() if $x == 0
即。在后缀表示法中应用条件。
我确信在F#中必须有类似的表达式,因为它在处理函数时非常灵活。但是当我试着写
时someFunction() if x = 0
或
someFunction() << if x = 0
我收到了预期的错误消息。有没有办法在F#中实现更多或更少的通用后缀条件运算符?
答案 0 :(得分: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()
更丑 - 但试验它是一件有趣的事情: - )