Test whether a variable equals either one of two values

后端 未结 7 1200
别那么骄傲
别那么骄傲 2020-12-13 08:31

I want to test whether a equals 1 or 2

I could do

a == 1 || a == 2

but this requires repeating

相关标签:
7条回答
  • 2020-12-13 08:49

    I don't know in what context you're using this in, but if it fits into a switch statement you can do:

    a = 1
    case a
    when 1, 2
      puts a
    end
    

    Some other benefits is that when uses the case equality === operator, so if you want, you can override that method for different behavior. Another, is that you can also use ranges with it too if that meets your use case:

    when 1..5, 7, 10
    
    0 讨论(0)
  • 2020-12-13 08:51

    First put this somewhere:

    class Either < Array
      def ==(other)
        self.include? other
      end
    end
    
    def either(*these)
      Either[*these]
    end
    

    Then, then:

    if (either 1, 2) == a
      puts "(i'm just having fun)"
    end
    
    0 讨论(0)
  • 2020-12-13 08:59

    Your first method is idiomatic Ruby. Unfortunately Ruby doesn't have an equivalent of Python's a in [1,2], which I think would be nicer. Your [1,2].include? a is the nearest alternative, and I think it's a little backwards from the most natural way.

    Of course, if you use this a lot, you could do this:

    class Object
      def member_of? container
        container.include? self
      end
    end
    

    and then you can do a.member_of? [1, 2].

    0 讨论(0)
  • 2020-12-13 09:01

    You can just use intersection like

    ([a] & [1,2]).present?
    

    a alternative way.

    0 讨论(0)
  • 2020-12-13 09:05

    Maybe I'm being thick here, but it seems to me that:

    (1..2) === a
    

    ...works.

    0 讨论(0)
  • 2020-12-13 09:12
    a.to_s()=~/^(1|2)$/
    
    0 讨论(0)
提交回复
热议问题