一行if语句不起作用
<%if @item.rigged %>Yes<%else%>No<%end%>
我在想这样的事情?
if @item.rigged ? "Yes" : "No"
但它不起作用。 Ruby有||=
但我甚至不知道如何使用这个东西。
if
从if @item.rigged ? "Yes" : "No"
删除if @item.rigged ? "Yes" : "No"
if @item.rigged ? "Yes" : "No"
三元运算符有formscondition ? if_true : if_false
condition ? if_true : if_false
在Ruby中,条件和if
expression式的一部分必须由expression式分隔符(即;
或换行符)或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中创build一个函数,所以需要一个运算符。
然而,在Ruby中, if
是expression式。 事实上, 一切都是Ruby中的expression式,所以它已经可以返回一个值。 条件操作符不需要存在 ,更不用说使用它了。
顺便说一句:习惯上用最后用问号来提问的方法,就像这样:
@item.rigged?
这显示了在Ruby中使用条件运算符的另一个问题:
@item.rigged? ? 'Yes' : 'No'
用相互接近的多个问号很难阅读。
一行如果:
<statement> if <condition>
你的情况:
"Yes" if @item.rigged "No" if !@item.rigged # or: "No" unless @item.rigged
从我所知道的
3单线
-
a = 10 if <condition>
例如: a = 10 if true # a = 10
,则b = 10 if false # b = nil
a = 10 if true # a = 10
, b = 10 if false # b = nil
,则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 = true ? 10 : 100 # a = 10
, a = false ? 10 : 100 # a = 100
a = false ? 10 : 100 # a = 100
我希望它有帮助。
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"
如果其他条件可以用三元运算符覆盖
@item.rigged? ? 'Yes' : 'No'
您可以使用 – –
(@ item.rigged)? “是”:“不”
如果@ item.rigged为真,它将返回'是',否则返回'否'