我会使用这样的语句遇到任何问题:
options[:discount] ? "Does something if true" : nil
而不是:
"Do something if true" if options[:discount]
我不确定我是否真的会使用以前的语法,但我感兴趣的是,在这样的语句中返回nil
会导致任何问题。只是想了解更多关于Ruby的结构,这对我来说是一个有趣的问题。感谢您的任何见解!
答案 0 :(得分:3)
这可能取决于您如何使用它。
让我们试试
options = {
:discount => true
}
x = options[:discount] ? "Does something if true" : nil
y = "Do something if true" if options[:discount]
p x
p y
你得到了
"Does something if true"
"Do something if true"
使用false
- 值,您会得到两次nil
。
如果要立即打印结果,而不使用
中的其他变量p options[:discount] ? "Does something if true" : nil
p "Do something if true" if options[:discount]
true
得到的结果相同,但false
只得到一个nil
。if
- 子句用于完整表达式{{1} }。
或另一个例子:
您可以使用三元运算符作为参数:
p "Do something if true"
但你得到def my_method(par)
p par
end
my_method(options[:discount] ? "Does something if true" : nil)
syntax error, unexpected modifier_if, expecting ')'
您可以使用my_method("Do something if true" if options[:discount])
两个大括号:
if
或您使用
my_method(("Do something if true" if options[:discount]))
答案 1 :(得分:1)
一个区别是这两个运营商的优先级。请考虑以下事项:
options = {discount: false}
prexisting_value = "prexisting value"
使用第一个表达式,你得到这个:
prexisting_value = options[:discount] ? "Does something if true" : nil
p prexisting_value
=> nil
使用第二个表达式,你得到这个:
prexisting_value = "Do something if true" if options[:discount]
p prexisting_value
=> "prexisting_value"
这是因为两个示例的解析方式不同(请注意括号的位置):
prexisting_value = (options[:discount] ? "Does something if true" : nil)
VS
(prexisting_value = "Do something if true") if options[:discount]