I\'m pretty new to Ruby and Rails but even after searching stack overflow and google I couldn\'t find an answer to this.
I\'ve got a simple Ruby shorthand if stateme
Use the ||
operator in this case:
@c = amount || r (1,4)
In your code, the defined?
method operates on amount ? amount : r( 1,4 )
instead of just on amount
as you intended. Also, the defined?
operator probably doesn't do what you expect, have a look at this blog entry to get an idea.
You're looking for the null coalescing operator. Try this:
@c = amount || r(1,4)
This code will assign amount to @c if amount is defined. If not it will assign the result of r(1,4) to @c.
http://eddiema.ca/2010/07/07/the-null-coalescing-operator-c-ruby-js-python/
defined?
is binding to amount ? amount : r(1,4)
so it is equivalent to:
defined?(amount ? amount : r(1,4))
You probably want:
defined?(amount) ? amount : r(1,4)
Actually, odds are that amount || r(1,4)
, or amount.nil? ? r(1,4) : amount
would better match what you want, since I think you don't want this:
1.9.3p194 :001 > defined?(amount) => nil 1.9.3p194 :002 > amount = nil => nil 1.9.3p194 :003 > defined?(amount) => "local-variable"
...in which case @c
would be nil
- the value of the defined variable.