此代码不编译:F#:算符优先
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)
。这里发生了什么事?
是的,我认为你是正确的,该优先顺序表是错误的/在这种情况下,误导性 - 我建议只需切换到'|>'在'b ||| 0x1 |>字节' – Carsten 2014-10-29 12:59:35
我只看了一下FSharp规范(http://fsharp.org/specs/language-spec/3.1/FSharpSpec-3.1-working.docx),并且'<|'确实具有更高的优先级比'|||'(如果我读了右表) - 这很可能是MSDN文档中的错误,或者它已被更改并且未更新 – Carsten 2014-10-29 13:28:38
@CarstenKönig有趣......如果您将其作为“答案”发布,我会接受它 – nodakai 2014-10-29 13:36:36