等于或等于语法

时间:2014-05-27 17:03:18

标签: ruby

在红宝石中,我可以写

a == b || a == c

如果bc等于a,则会返回true。

但是当我想针对a

检查许多变量时,这种语法不是很漂亮
a == b || a == c || a == d || a == e || a == f

有没有一种漂亮的方法可以做到这一点?

像这样的东西

a ==|| [b,c,d,e,f]

代表OR

a ==&& [b,c,d,e,f]

AND会很棒。

3 个答案:

答案 0 :(得分:6)

or使用#any?

 [b,c,d,e,f].any? { |e| e == a }

对于and,请使用all?

 [b,c,d,e,f].all? { |e| e == a }

答案 1 :(得分:3)

这应该这样做:

[b,c,d,e,f].include? a

AND味道意味着所有变量应该彼此相等,所以我想这会起作用:

[a,b,c,d,e,f].uniq.size == 1

答案 2 :(得分:3)

我的偏好是使用case语句,因为我觉得它最好:

case a
when b,c,d,e,f
  ..do something..
else
  ..do something else..
end

您也可以使用类似集合的操作。

arr = [b,c,d,e,f]

确定a是否等于arr的任何元素:

(arr & [a]).any?

确定arr的所有元素是否等于a

(arr - [a]).empty?

最后(因为使用uniq - 显而易见的解决方案 - 已被建议),这是一种有趣的方法,可以检查它们是否完全相同(当<=>定义时):

arr = [a,b,c,d,e,f]
arr.min == arr.max