此代碼不編譯: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