此代码无法编译:
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)
。这里发生了什么?
答案 0 :(得分:3)
我刚看了一下FSharp规范,其中<|
的优先级确实高于|||
(如果我读右表)
因此,它很可能是MSDN文档中的错误,或者是已更改但未更新。
第35页: