甚至问这个我都觉得很傻,因为它看起来很琐碎,但我的大脑让我失望了。如果我有以下情况:
let a, b, c = 1, 1, 1
是否有一种优雅的方法来确定 a、b 和 c 是否都具有相同的值。就像是:
let result = (a = b = c)
这失败了,因为表达式
a = b
返回 true 并且下一个表达式的结果是 true = c
并提示它期待 int,而不是 bool。我唯一能想到的是:a = b && a = c && b = c
当我想添加更多变量时,这将不起作用。
我真正想做的是:
let same (x: string * string * string) =
match x with
| (a, a, a) -> true
| _ -> false
我希望我可以将所有元素匹配到一个元素中,如果它们不同,它将继续前进,但它在匹配中的第二个元素上表示它已经被绑定(bind)。
最佳答案
要检查列表中的每个值是否相同:
let rec same = function
| x::y::_ when x <> y -> false
| _::xs -> same xs
| [] -> true
用法
let a, b, c = 1, 1, 1
same [a; b; c] //true
关于f# - 有没有办法在线进行多值比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11477407/