2

如何在 Ruby 的条件语句中表达多个或选项?我认为这样的事情会起作用,但它不会:

1 == (3 || 2 || 1)
(1 == (3 || 2 || 1))

我认为那些会返回true。

我想用一种方式来说明一组事物中是否有任何数量为真,然后返回真。我必须把它拼出来吗?

if (1 == 3 || 1 == 2 || 1 == 1)

用英语我会说

如果 1 等于 3、2 或 1,则返回 true。

4

4 回答 4

5

是的,这是一种方法。更多 Rubyesque 将是:

if [3, 2, 1].include?(1)

1 == (3 || 2 || 1)不起作用的原因是因为(3 || 2 || 1)首先评估。如果第||一个值为真,则运算符返回第一个值,如果第一个值为假,则返回第二个。

因此(3 || 2 || 1)3,所以你在比较1 == 3,这显然是false

于 2013-01-18T23:45:41.210 回答
1

include方法可以满足您的要求。此外,您可以使用any?能够很好地表达您想要的方法:

[1, 2, 3].any? { |v| 1 == v }

但是为了平等,你可以使用include.

于 2013-01-18T23:54:11.317 回答
1

如果您要测试的值不连续,那么这Array#include?是一个不错的选择。

如果测试值是连续的,并且可以表示为Range,则可以使用:

Range#cover?
Range#include?
Range#member?

例如:

(1..3).member?(1) # => true

include?并且member?可能更通用一点,在Enumerable中定义,因此适用于任何集合对象或从那里派生的类。Enumerable 还定义了any?, 用于此问题的另一个答案,加上none?one?

于 2013-01-18T23:55:01.733 回答
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
于 2013-01-22T21:31:35.167 回答