F#:运算符优先级

时间:2014-10-29 12:48:36

标签: f# operator-precedence

此代码无法编译:

let f (x:byte) = printfn "%d" x

let b = int 'a'
f(byte <| b ||| 0x1)
(4,17): error FS0001: This expression was expected to have type
    byte
but here has type
    int

F#运算符表声明向后管道 operaotor (<|),其形式为(< op),其优先级低于按位或运算符(|||)

所以我认为(byte <| b ||| 0x1)应该被解析为(byte <| (b ||| 0x1))。但编译器错误消息表明它被解析为((byte <| b) ||| 0x1)。这里发生了什么?

1 个答案:

答案 0 :(得分:3)

我刚看了一下FSharp规范,其中<|的优先级确实高于|||(如果我读右表)

因此,它很可能是MSDN文档中的错误,或者是已更改但未更新。

第35页:

enter image description here