测试变量是否与if-elsif链长的几个字符串中的任何一个匹配,或者case-when

我假设在ruby中有一个很好的单行方式

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

但在我通常咨询的在线参考文献中找不到如何做到这一点…

谢谢!

也许你不知道你可以在一个案例中加入多个条件:

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

但对于这个特定的基于字符串的测试,我会使用正则表达式:

 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 ) 

你可以使用Array#include? 像这样:

 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