一行if语句不起作用

<%if @item.rigged %>Yes<%else%>No<%end%> 

我在想这样的事情?

 if @item.rigged ? "Yes" : "No" 

但它不起作用。 Ruby有||=但我甚至不知道如何使用这个东西。

ifif @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中,条件和ifexpression式的一部分必须由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单线

  1. a = 10 if <condition>

例如: a = 10 if true # a = 10 ,则b = 10 if false # b = nil a = 10 if true # a = 10b = 10 if false # b = nil ,则b = 10 if false # b = nil

  1. a = 10 unless <condition>

例如: a = 10 unless false # a = 10b = 10 unless true # b = nil

  1. a = <condition> ? <a> : <b>

例如: a = true ? 10 : 100 # a = 10 a = true ? 10 : 100 # a = 10a = 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为真,它将返回'是',否则返回'否'