F#中的Postfix条件运算符

时间:2013-12-17 05:11:58

标签: f# postfix-operator

在Perl语言中,可以编写类似

的内容
someFunction() if $x == 0

即。在后缀表示法中应用条件。

我确信在F#中必须有类似的表达式,因为它在处理函数时非常灵活。但是当我试着写

someFunction() if x = 0

someFunction() << if x = 0

我收到了预期的错误消息。有没有办法在F#中实现更多或更少的通用后缀条件运算符?

1 个答案:

答案 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()更丑 - 但试验它是一件有趣的事情: - )