这个编译器喜欢:
let test Xf Yf = Xf + Yf
这个编译器不喜欢:
let test Xfd Yfd = Xfd + Yfd
警告:大写的变量标识符通常不应该用在模式中,并且可能表示模式名称拼写错误。
也许我没有正确使用谷歌搜索,但我没有设法找到任何解释为什么函数参数会出现这种情况的东西......
这个编译器喜欢:
let test Xf Yf = Xf + Yf
这个编译器不喜欢:
let test Xfd Yfd = Xfd + Yfd
警告:大写的变量标识符通常不应该用在模式中,并且可能表示模式名称拼写错误。
也许我没有正确使用谷歌搜索,但我没有设法找到任何解释为什么函数参数会出现这种情况的东西......
我同意这个错误信息看起来有点神秘,但它有一个很好的动机。根据 F# 命名指南,区分联合的案例应该使用命名PascalCase
并且编译器试图确保您不会在模式匹配中意外拼错案例名称。
例如,如果您有以下联合:
type Side =
| Left
| Right
您可以编写以下函数,当参数为Left
“错误”时打印“ok”!否则:
let foo a =
match a with
| Lef -> printfn "ok"
| _ -> printfn "wrong!"
代码中有一个错字——我刚刚写的Lef
——但代码仍然有效,因为Lef
可以解释为一个新变量,因此匹配分配任何一侧Lef
并始终运行第一个案例。关于大写标识符的警告有助于避免这种情况。
F# 尝试强制执行活动模式的大小写规则 - 考虑这段代码的作用
let f X =
match X with
|X -> 1
|_ -> 2
这很令人困惑。此外,函数参数类似于模式,你可以做
let f (a,b,_) = a,b
例如。不太清楚为什么第三个字母会触发警告