玩弄中缀运算符后,我对以下内容感到惊讶:
let (>~~~) = function null -> String.Empty | s -> s // compiles fine, see screenshot
match >~~~ input with .... // error: Unexpected infix operator in expression
和:
更改前缀运算符的第一个字符(!~~~
例如)修复它。我得到一个中缀运算符意外的错误是相当奇怪的。悬停显示定义为string -> string
。
我对这个错误并不感到惊讶,F# 要求 (iirc) 前缀运算符的第一个字符本身必须是预定义的前缀运算符之一。但是为什么它编译得很好,当我使用它时,编译器会抱怨?
更新:F# 编译器似乎知道在其他情况下,当我在运算符定义中使用无效字符时,它会显示“无效的运算符定义。前缀运算符定义必须使用有效的前缀运算符名称。”