我正在尝试编写一个需要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)