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