Рубиновые условные выражения

Как выразить несколько или параметры в условном выражении в Ruby? Я думал, что-то вроде этого будет работать, но это не так:

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

Я думал, что это вернет истину.

Я хочу, чтобы какой-то способ сказать, что любое число из группы истинно, вернуть true. Должен ли я это прописать?

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

На английском я бы сказал

Если 1 равно 3, 2 или 1, верните true.

4 ответа

Решение

Да, это один из способов сделать это. Еще бы Рубески было бы:

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#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
Другие вопросы по тегам