ruby是一种测试多个变量是否具有相同值的简单方法

ruby是一种测试多个变量是否具有相同值的简单方法,ruby,syntax,Ruby,Syntax,在ruby中有没有一种简单的方法来测试几个变量是否具有相同的值 与此相关的东西: if a == b == c == d #does not work #Do something because a, b, c and d have the same value end 当然,可以对照一个主变量检查每个变量,看看它们是否都是真的,但这有点语法化,不太清楚 if a == b && a == c && a == d #does work #we ha

在ruby中有没有一种简单的方法来测试几个变量是否具有相同的值

与此相关的东西:

if a == b == c == d #does not work
   #Do something because a, b, c and d have the same value
end
当然,可以对照一个主变量检查每个变量,看看它们是否都是真的,但这有点语法化,不太清楚

if a == b && a == c && a == d #does work
    #we have now tested the same thing, but with more syntax.
end
另一个需要这样做的原因是,如果您在测试之前确实处理了每个变量

if array1.sort == array2.sort == array3.sort == array4.sort #does not work
    #This is very clear and does not introduce unnecessary variables
end
#VS
tempClutter = array1.sort
if tempClutter == array2.sort && tempClutter == array3.sort && tempClutter == array4.sort #works
   #this works, but introduces temporary variables that makes the code more unclear
end

将它们全部放入一个数组,看看是否只有一个唯一的项

if [a,b,c,d].uniq.length == 1
  #I solve almost every problem by putting things into arrays
end
正如sawa在评论中指出的,一个?如果全部为假或为零,则失败。

在他对以下内容的评论中提出了一种非常好的方法:

这是迄今为止我所见过的最简洁的表达方式。

那么:

a = [1,1,1]
(a & a).size == 1 #=> true

a = [1,1,2]
(a & a).size == 1 #=> false
[a,b,c,d] == [b,c,d,a]
真的只是:

[a,b,c] == [b,c,d]

很好。这肯定是比使用临时变量更好的方法!请注意,如果它们是
nil
false
,则不能使用
one?
。洗牌无效,它可能会以相同的顺序结束。@Pitri您知道
[1,1,2]。洗牌
有时返回
[1,1,2]
,不是吗?;-)是的,你部分是对的;所以删除了。但是
shuffle
总是这样,但是当出现重复项时,它将失败。:)我也喜欢这个解决方案,但是没有模块扩展,它比Shawn的答案更冗长。
[b, c, d].all?(&a.method(:==))
[b, c, d].all?(&a.method(:==))