为什么我可以把|>放在下一行但是<| 给出语法错误?

Cha*_*ert 2 f# syntax-error

我可以做这个:

let foo = bar
    |> baz
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,我收到语法错误:

let foo = bar
    <| baz
Run Code Online (Sandbox Code Playgroud)

为什么?

当我定义自己的中缀运算符并尝试以这种方式使用它时,我也会遇到语法错误.

Tom*_*cek 5

除非我遗漏了某些内容,否则两个运算符(以及任何其他中缀运算符)的行为相同.当我定义barbaz使用您的示例时,我在两种情况下都会出错.F#中的off-side规则允许您在距离左侧较远的位置缩进运算符,但参数列必须匹配:

let bar = 1
let baz x = x + 1

let foo1 = bar 
        |> baz

let foo2 = baz 
        <| bar
Run Code Online (Sandbox Code Playgroud)

这两个都给出了一条错误消息:

let foo1 = bar 
  |> baz

let foo2 = baz 
  <| bar
Run Code Online (Sandbox Code Playgroud)

(虽然您可能只看到第一个错误,因为F#编译器在语法错误后停止报告其他错误 - 可能是因为它无法保证它们是合理的)

这些规则在MSDN上的代码格式指南中有很好的描述.