什么是"大写变量标识符通常不应该用于模式......"?

Ben*_*jol 1 f# compiler-warnings

这个编译器像:

let test Xf Yf = Xf + Yf
Run Code Online (Sandbox Code Playgroud)

这个编译器不喜欢:

let test Xfd Yfd = Xfd + Yfd
Run Code Online (Sandbox Code Playgroud)

警告:通常不应在模式中使用大写变量标识符,并且可以指示拼写错误模式名称.

也许我没有正确搜索,但我没有设法找到解释为什么这是函数参数的情况......

Tom*_*cek 6

我同意这个错误信息看起来有点神秘,但它有一个很好的动机.根据F#命名准则,应使用命名工会的案例,PascalCase并且编译器正在尝试确保您不会在模式匹配中意外拼错案例名称.

例如,如果您有以下联合:

type Side = 
  | Left 
  | Right
Run Code Online (Sandbox Code Playgroud)

您可以编写以下函数,在参数为Left"错误"时打印"ok" .除此以外:

let foo a = 
  match a with 
  | Lef -> printfn "ok"
  | _ -> printfn "wrong!"
Run Code Online (Sandbox Code Playgroud)

代码中有一个拼写错误 - 我写的只是Lef- 但代码仍然有效,因为Lef可以解释为一个新的变量,因此匹配分配任何一方Lef并始终运行第一个案例.关于大写标识符的警告有助于避免这种情况.

  • 因为模式匹配可以应用于函数参数,即对于上面的示例:let foo Left = 1. (3认同)