Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Test whether a variable equals either one of two values

Tags:

ruby

I want to test whether a equals 1 or 2

I could do

a == 1 || a == 2 

but this requires repeating a (which would be annoying for longer variables)

I'd like to do something like a == (1 || 2), but obviously this won't work

I could do [1, 2].include?(a), which is not bad, but strikes me as a bit harder to read

Just wondering how do to this with idiomatic ruby

like image 751
Tom Lehman Avatar asked Feb 03 '10 23:02

Tom Lehman


People also ask

How do you know if a variable is equal to one of two values?

To check if a variable is equal to one of multiple values, add the values to an array and use the includes() method on the array. The includes method returns true if the provided value is contained in the array.

How do you check if a variable is equal to a value?

Use the strict equality (===) operator to check if a variable is equal to true - myVar === true . The strict equality operator will return true if the variable is equal to true , otherwise it will return false .

How do I test if a variable does not equal either of two values Python?

Using the != The most direct way to determine if two values are not equal in Python is to use the != operator (Note: There should not be any space between ! and = ). The != operator returns True if the values on both sides of the operator are not equal to each other.

How do you check if a variable is equal to multiple things in Python?

if x == 1 or y == 1 or z == 1: x and y are otherwise evaluated on their own ( False if 0 , True otherwise). You can shorten that using a containment test against a tuple: if 1 in (x, y, z):


2 Answers

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].

like image 51
Peter Avatar answered Oct 16 '22 21:10

Peter


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 
like image 42
Jack Chu Avatar answered Oct 16 '22 21:10

Jack Chu