Set Ruby variable if it is not already defined
While x ||= value
is a way to say "if x contains a falsey value, including nil (which is implicit in this construct if x is not defined because it appears on the left hand side of the assignment), assign value to x", it does just that.
It is roughly equivalent to the following. (However, x ||= value
will not throw a NameError
like this code may and it will always assign a value to x
as this code does not -- the point is to see x ||= value
works the same for any falsey value in x, including the "default" nil
value):
if !x x = valueend
To see if the variable has truly not been assigned a value, use the defined?
method:
>> defined? z=> nil >> z = nil => nil >> defined? z => "local-variable" >> defined? @z => nil >> @z = nil => nil >> defined? @z => "instance-variable"
However, in almost every case, using defined?
is code smell. Be careful with power. Do the sensible thing: give variables values before trying to use them :)
Happy coding.