I want to test whether a
equals 1 or 2
I could do
a == 1 || a == 2
but this requires repeating
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
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
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]
.
You can just use intersection like
([a] & [1,2]).present?
a alternative way.
Maybe I'm being thick here, but it seems to me that:
(1..2) === a
...works.
a.to_s()=~/^(1|2)$/