<%if @item.rigged %>Yes<%else%>No<%end%>
我在考虑这样的事情?
if @item.rigged ? "Yes" : "No"
但它不起作用。 Ruby有||=
,但我甚至不确定如何使用那个东西。
答案 0 :(得分:370)
从if
if @item.rigged ? "Yes" : "No"
三元运算符的格式为condition ? if_true : if_false
答案 1 :(得分:170)
在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中唯一可以返回值的东西是函数和运算符,并且因为不可能在C中使if
成为函数,所以需要一个运算符。
然而,在Ruby中,if
是一个表达式。实际上,所有是Ruby中的表达式,因此已经可以返回一个值。条件运算符甚至不需要存在,更不用说使用它了。
@item.rigged?
这显示了在Ruby中使用条件运算符的另一个问题:
@item.rigged? ? 'Yes' : 'No'
使用彼此接近的多个问号很难阅读。
答案 2 :(得分:61)
如果符合以下一行:
<statement> if <condition>
你的案子:
"Yes" if @item.rigged
"No" if !@item.rigged # or: "No" unless @item.rigged
答案 3 :(得分:16)
据我所知
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
我希望它有所帮助。
答案 4 :(得分:7)
shell和C单行结构都可以工作(ruby 1.9.3p429):
# Shell format
irb(main):022:0> true && "Yes" || "No"
=> "Yes"
irb(main):023:0> false && "Yes" || "No"
=> "No"
# C format
irb(main):024:0> true ? "Yes" : "No"
=> "Yes"
irb(main):025:0> false ? "Yes" : "No"
=> "No"
答案 5 :(得分:7)
if else条件可以用三元运算符覆盖
@item.rigged? ? 'Yes' : 'No'
答案 6 :(得分:2)
为简单起见,如果需要将默认值设置为nil,则可以使用以下值:
@something.nil? = "No" || "Yes"
答案 7 :(得分:1)
您可以使用----
(@ item.rigged)? “是”:“否”
如果@ item.rigged为true,则返回“Yes”,否则返回“No”
答案 8 :(得分:0)
if apple_stock > 1
:eat_apple
else
:buy_apple
end
上面的语句在ruby中可以写成三元语句的形式:
apple_stock > 1 ? :eat_apple : :buy_apple