Подтвердить что ты не робот

Проверьте, соответствует ли переменная какая-либо из нескольких строк без длинной цепи if-elsif или case-when

Я предполагаю, что есть хороший однострочный способ сказать в ruby ​​

if mystr == "abc" or "def " or "ghi" or "xyz"

но не может найти, как это сделать в онлайн-ссылках, которые я обычно консультирую...

Спасибо!

4b9b3361

Ответ 1

Возможно, вы не знали, что можете задать несколько условий для одного случая:

case mystr
  when "abc", "def", "ghi", "xyz"
    ..
end

Но для этого конкретного теста на основе строки я бы использовал regex:

if mystr =~ /\A(?:abc|def|ghi|xyz)\z/

Если вы не хотите создавать регулярное выражение и вам не нужен оператор case, вы можете создать массив объектов и использовать Array#include? проверить, находится ли объект в массиве:

if [a,b,c,d].include?( o )

или, с помощью объекта исправления обезьяны, вы можете даже повернуть его:

class Object
  def in?( *values )
    values.include?( self )
  end
end

if o.in?( a, b, c, d )

Ответ 2

Вы можете использовать Array#include? следующим образом:

if ["abc", "def ", "ghi", "xyz"].include?(mystr)

Ответ 3

>> mystr="abc"
=> "abc"
>> mystr[/\A(abc|def|ghi|xyz)\z/]
=> "abc"
>> mystr="abcd"
=> "abcd"
>> mystr[/\A(abc|def|ghi|xyz)\z/]
=> nil