Test if variable matches any of several strings w/o long if-elsif chain, or case-when

后端 未结 3 1552
忘掉有多难
忘掉有多难 2020-12-03 21:08

I assume there is a nice one-line way to say in ruby

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

but cannot find how to do that i

3条回答
  •  有刺的猬
    2020-12-03 21:48

    Perhaps you didn't know that you can put multiple conditions on a single case:

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

    But for this specific string-based test, I would use regex:

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

    If you don't want to construct a regex, and you don't want a case statement, you can create an array of objects and use Array#include? test to see if the object is in the array:

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

    or, by monkey-patching Object, you can even turn it around:

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

提交回复
热议问题