三元表达与"定义?" 返回"表达式"而不是值?

Jan*_*nis 7 ruby expression ternary-operator

我是Ruby和Rails的新手,但即使在搜索堆栈溢出和谷歌后我也找不到答案.

我有一个简单的Ruby简写if语句应该返回integer如下:

# in the context of this erb document `amount` is defined as 5.
@c = ( defined? amount ? amount : r( 1,4 ) )
Run Code Online (Sandbox Code Playgroud)

r()是一个自定义辅助函数,在这种情况下返回1和4 之间的随机数.

我打算这样工作的方式if amount是定义,然后使用定义为的数字amount,else生成1到4之间的随机数,然后使用它.

@c然而,当打印出Ruby输出expression而不是数字时.

我需要做些什么才能让我按照我的意图工作,我做错了什么?

非常感谢您的阅读!

Dan*_*man 9

defined?绑定到amount ? amount : r(1,4)所以它相当于:

defined?(amount ? amount : r(1,4))
Run Code Online (Sandbox Code Playgroud)

你可能想要:

defined?(amount) ? amount : r(1,4)
Run Code Online (Sandbox Code Playgroud)

实际上,可能性是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-所定义的变量的值.