是否有一种简单的方法可以测试多个变量在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
答案 0 :(得分:19)
将它们全部扔进一个数组,看看是否只有一个唯一的项目。
if [a,b,c,d].uniq.length == 1
#I solve almost every problem by putting things into arrays
end
正如sawa在评论中指出的那样。如果它们都是假的或没有,那就失败了。
答案 1 :(得分:5)
tokland在对similar question的评论中提出了一个非常好的方法:
module Enumerable
def all_equal?
each_cons(2).all? { |x, y| x == y }
end
end
到目前为止,这是表达我最清楚的方式。
答案 2 :(得分:2)
a = [1,1,1]
(a & a).size == 1 #=> true
a = [1,1,2]
(a & a).size == 1 #=> false
答案 3 :(得分:2)
怎么样:
[a,b,c,d] == [b,c,d,a]
真的只是:
[a,b,c] == [b,c,d]
会做
答案 4 :(得分:1)
[b, c, d].all?(&a.method(:==))