一行if语句不起作用

时间:2010-09-30 05:00:09

标签: ruby

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

我在考虑这样的事情?

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

但它不起作用。 Ruby有||=,但我甚至不确定如何使用那个东西。

9 个答案:

答案 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中的表达式,因此已经可以返回一个值。条件运算符甚至不需要存在,更不用说使用它了。

BTW:习惯上用最简单的问题来命名问题的方法,如下所示:

@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个单行

  1. a = 10 if <condition>
  2. 示例:

    a = 10 if true # a = 10
    b = 10 if false # b = nil
    
    1. a = 10 unless <condition>
    2. 示例:

      a = 10 unless false # a = 10
      b = 10 unless true # b = nil
      
      1. a = <condition> ? <a> : <b>
      2. 示例:

        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