Probar si la variable coincide con alguna de varias cadenas sin cadena if-elsif, o case-when

Supongo que hay una buena forma de una línea para decir en ruby

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

pero no encuentro cómo hacerlo en las referencias en línea que normalmente consulto …

¡Gracias!

Quizás no sabía que puede poner múltiples condiciones en un solo caso:

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

Pero para esta prueba específica basada en cadenas, usaría regex:

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

Si no desea construir una expresión regular y no desea una statement de case , puede crear una matriz de objetos y usar Array#include? prueba para ver si el objeto está en la matriz:

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

O, por el objeto de parcheo de monos, incluso puedes darle la vuelta:

 class Object def in?( *values ) values.include?( self ) end end if o.in?( a, b, c, d ) 

Puedes usar Array#include? Me gusta esto:

 if ["abc", "def ", "ghi", "xyz"].include?(mystr) 
 >> mystr="abc" => "abc" >> mystr[/\A(abc|def|ghi|xyz)\z/] => "abc" >> mystr="abcd" => "abcd" >> mystr[/\A(abc|def|ghi|xyz)\z/] => nil