对三个或更多对象进行平等测试

如果我有三个或更多这样的对象:

a = 4 b = 4 c = 4 d = 2 

什么是干净的ruby式的方式来确定它们是否都是平等的? 在三个或更多元素上运行相等测试的任何定制方法?

我想我可以这样做:

 arrays = [a,b,c,d].map{|x| [x]} arrays.first == arrays.reduce(:&) ? true : false 

这似乎有用,但感觉有点像火腿,其他开发人员可能很难阅读。

 [a,b,c,d].any?{|x| x != a} 

要么

 array.any?{|x| x != array.first} 

或者,#all? 方法可以更直观地阅读:

 array.all? {|x| x == array.first } 
 [a, b, c, d].group_by(&:itself).length == 1 # => false 

要么

 [a, b, c, d].chunk(&:itself).to_a.length == 1 # => false 

要么

 [a, b, c, d].chunk_while(&:==).to_a.length == 1 # => false 

还是天真的:

 [a, b, c, d].uniq.length == 1 

我被提醒了one? 。 如果您没有任何假元素,可以写上面的内容:

 [a, b, c, d].uniq.length.one? 

我认为@kipar的答案总是更好,但为了“以你开始的方式做”,我会在这里发布:

 [a, b, c, d].reduce { |r, e| r == e && r } && true