我甚至对这个问题感到愚蠢,因为它看起来很琐碎,但我的大脑让我失望了.如果我有以下内容:
let a, b, c = 1, 1, 1
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以确定a,b和c是否都保持相同的值.就像是:
let result = (a = b = c)
Run Code Online (Sandbox Code Playgroud)
这失败是因为表达式a = b返回true并且下一个表达式导致true = c并且抱怨它期望int,而不是bool.我唯一能想到的是:
a = b && a = c && b = c
Run Code Online (Sandbox Code Playgroud)
当我想添加更多变量时,它将无法工作.
我真正要做的就是:
let same (x: string * string * string) =
match x with
| (a, a, a) -> true
| _ -> false
Run Code Online (Sandbox Code Playgroud)
我希望我可以将所有元素匹配到一个元素中,如果它们不同,它会继续前进,但它在匹配中的第二个元素上说它已经被绑定了.
要检查列表中的每个值是否相同:
let rec same = function
| x::y::_ when x <> y -> false
| _::xs -> same xs
| [] -> true
Run Code Online (Sandbox Code Playgroud)
用法
let a, b, c = 1, 1, 1
same [a; b; c] //true
Run Code Online (Sandbox Code Playgroud)