如何在Ruby中的条件语句中表达多个或选项?我认为这样的东西会起作用,但事实并非如此:
1 == (3 || 2 || 1)
(1 == (3 || 2 || 1))
我认为那些会回归真实。
我想要一种方法来说明如果任何一组事物都是真的那么返回true。我必须在很长的路上拼出来吗?
if (1 == 3 || 1 == 2 || 1 == 1)
用英语我会说的
如果1等于3,2或1,则返回true。
答案 0 :(得分:5)
是的,这是一种方法。更多Rubyesque将是:
if [3, 2, 1].include?(1)
1 == (3 || 2 || 1)
不起作用的原因是首先评估(3 || 2 || 1)
。 ||
运算符返回第一个值,如果它是真的,第二个值,如果第一个值是假的。
因此(3 || 2 || 1)
为3
,因此您要比较1 == 3
,这显然是false
。
答案 1 :(得分:1)
include
方法可以满足您的需求。此外,您可以使用很好地表达您想要的any?
方法:
[1, 2, 3].any? { |v| 1 == v }
但是为了平等,你可以使用include
。
答案 2 :(得分:1)
如果要测试的值不是连续的,那么Array#include?
是一个不错的选择。
如果测试值是连续的,并且可以表示为Range,则可以使用:
Range#cover?
Range#include?
Range#member?
例如:
(1..3).member?(1) # => true
include?
和member?
可能更加通用,在Enumerable中定义,因此适用于任何集合对象或从那里派生的类。 Enumerable还定义any?
,用于此问题的另一个答案,加上none?
和one?
。
答案 3 :(得分:0)
case when
条件支持多个选项:
x = 1
puts case x
when 1, 2, 3 then "Low"
when 4, 5, 6 then "High"
else "Strange dice..."
end
#=>Low