Answers:
if
从中删除if @item.rigged ? "Yes" : "No"
三元运算符具有形式 condition ? if_true : if_false
s/that/not that
:)
在Ruby中,条件和表达式的then
一部分if
必须用表达式分隔符(即;
换行符)或then
关键字分隔。
因此,所有这些都将起作用:
if @item.rigged then 'Yes' else 'No' end
if @item.rigged; 'Yes' else 'No' end
if @item.rigged
'Yes' else 'No' end
Ruby中还有一个条件运算符,但这完全没有必要。C中需要条件运算符,因为它是一个运算符:在C中,它if
是一条语句,因此无法返回值,因此,如果要返回值,则需要使用可以返回值的东西。C中唯一可以返回值的东西是函数和运算符,并且由于不可能if
在C中创建函数,因此需要一个运算符。
但是,在Ruby中if
是一个表达式。实际上,一切都是Ruby中的表达式,因此它已经可以返回值。条件运算符甚至不需要存在,更不用说使用它了。
顺便说一句:习惯上命名方法是用来问问题的末尾带有问号,例如:
@item.rigged?
这显示了在Ruby中使用条件运算符的另一个问题:
@item.rigged? ? 'Yes' : 'No'
很难理解彼此靠近的多个问号。
如果满足以下条件,则为一行:
<statement> if <condition>
您的情况:
"Yes" if @item.rigged
"No" if !@item.rigged # or: "No" unless @item.rigged
"No" unless @item.rigged
为了防止!
nil
而不是'Yes'
if item.rigged
true。如果nil
不满足条件,则单行if或non语句返回。
据我所知
3个单线
a = 10 if <condition>
例:
a = 10 if true # a = 10
b = 10 if false # b = nil
a = 10 unless <condition>
例:
a = 10 unless false # a = 10
b = 10 unless true # b = nil
a = <condition> ? <a> : <b>
例:
a = true ? 10 : 100 # a = 10
a = false ? 10 : 100 # a = 100
希望对您有所帮助。
如果其他条件可以用三元运算符覆盖
@item.rigged? ? 'Yes' : 'No'