我正在尝试编写一个需要3个数字的函数,xy z.如果x等于y,那么它应该返回z.否则,返回x.我无法弄清楚为什么我的尝试总是返回z,即使x!= y.任何帮助将不胜感激我仍然是OCaml的新手.
let test x y z =
match x with
| y when x = y -> z
| _ -> x
Run Code Online (Sandbox Code Playgroud)
您的代码不比较x
到y
,它使用的模式y
来匹配x
.这总是成功并且与y
价值结合x
.也就是说,您正在创建一个y
具有相同值的新局部变量x
.
要修复代码,您可以这样做:
let test x y z =
match x with
| _ when x = y -> z
| _ -> x
Run Code Online (Sandbox Code Playgroud)
但是,当你可以这样做时,这似乎有点愚蠢:
let test x y z =
if x = y then z else x
Run Code Online (Sandbox Code Playgroud)