Ruby条件语句

时间:2013-01-18 23:42:23

标签: ruby conditional-statements

如何在Ruby中的条件语句中表达多个或选项?我认为这样的东西会起作用,但事实并非如此:

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

我认为那些会回归真实。

我想要一种方法来说明如果任何一组事物都是真的那么返回true。我必须在很长的路上拼出来吗?

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

用英语我会说的

  

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

4 个答案:

答案 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