2013-05-01 4 views
1

Есть ли правильный синтаксис в Ruby для сравнения нескольких значений с одной и той же переменной? Например:Каков правильный синтаксис для нескольких сравнений?

#!/usr/bin/ruby -w 

y = 15 
p 'success' if y == 1 || y == 5 || y == -2 || y == 15132 || y == 3.14159265 || y == 15 

Может ли это быть написано как-то вдоль линий:

y = 15 
p 'success' if y == 1,5,-2,15132,3.14159265,15 

И, если да, то, что также к while петлями?

y = 15 
while y != 1,5,-2,15132,3.14159265,15 
y = rand(50) 
p y 
end 

Основываясь на моем поиске, я склонен считать, что это невозможно, или это слишком неясно для моих поисков.

Надеюсь, это второй случай.

Я уже рассмотрел решение с итерацией массива, но это не так красиво или просто, как хотелось бы.

+2

Точные правила выражения применяются к 'if' и' while'. Кроме того, будьте осторожны при сравнении с числами с плавающей запятой - обычно это не даст ожидаемых результатов, если либо число является результатом вычисления. – user2246674

ответ

3

Вы ищете include?

p 'success' if [1,5,-2,15132,3.14159265,15].include? y 
+0

да, это именно то, что я искал, спасибо –

+0

! ([..]. Include? Y) –

3
case y 
when 1, 5, -2, 15132, 3.14159265, 15 then p "success" 
end 
+0

Как мой? пожалуйста, проверьте :) –

0

Array#index Из:

Возвращает индекс первого объекта в арных таким образом, чтобы объект == к obj.Returns nil, если совпадение не найдено.

p 'success' if [1,5,-2,15132,3.14159265,15].index(y) 
1

Для более общего случая вы можете использовать любого? метод с блоком сравнения; это имеет преимущество в использовании с операторами, кроме ==:

p 'success' if [1, 5, -2, 15132, 3.14159265, 15].any? { |i| i == y } 
Смежные вопросы