我对Ruby和Rails很陌生,但即使在搜索了堆栈溢出和google之后我也无法找到答案。
我有一个简单的Ruby简写if语句应该像这样返回integer
:
# in the context of this erb document `amount` is defined as 5.
@c = ( defined? amount ? amount : r( 1,4 ) )
r()
是一个自定义帮助函数,它在之间返回一个随机数,在这种情况下 1和4。
我打算这样做的方式是定义if
amount
,然后使用定义为amount
的数字,else
生成1到4之间的随机数而是使用它。
打印出@c
时,Ruby会输出expression
而不是数字。
我需要做些什么才能让我按照我的意图工作,我做错了什么?
非常感谢您的阅读!
答案 0 :(得分:9)
defined?
绑定到amount ? amount : r(1,4)
,因此它等同于:
defined?(amount ? amount : r(1,4))
你可能想要:
defined?(amount) ? amount : r(1,4)
实际上,可能性amount || r(1,4)
或amount.nil? ? r(1,4) : amount
会更符合您的要求,因为我认为您不希望这样:
1.9.3p194 :001 > defined?(amount) => nil 1.9.3p194 :002 > amount = nil => nil 1.9.3p194 :003 > defined?(amount) => "local-variable"
...在这种情况下@c
将是nil
- 定义变量的值。
答案 1 :(得分:3)
在这种情况下使用||
运算符:
@c = amount || r (1,4)
在您的代码中,defined?
方法在amount ? amount : r( 1,4 )
上运行,而不是按照您的意图在amount
上运行。此外,defined?
运算符可能无法达到预期效果,请查看此blog entry以获取主意。
答案 2 :(得分:2)
您正在寻找空合并运算符。试试这个:
@c = amount || r(1,4)
如果定义了金额,此代码将为@c分配金额。如果不是,它会将r(1,4)的结果分配给@c。
http://eddiema.ca/2010/07/07/the-null-coalescing-operator-c-ruby-js-python/