【问题标题】:One line if statement not working一行 if 语句不起作用
【发布时间】:2010-09-30 05:00:08
【问题描述】:
<%if @item.rigged %>Yes<%else%>No<%end%>

我在想这样的事情吗?

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

但它不起作用。 Ruby 有 ||=,但我什至不确定如何使用它。

【问题讨论】:

    标签: ruby


    【解决方案1】:

    if @item.rigged ? "Yes" : "No" 中删除if

    三元运算符的形式为condition ? if_true : if_false

    【讨论】:

    • 如果条件以'?'结尾可以放弃吗?即如果条件是@customer.sales.present?你能去掉'?'吗? ... 不用担心。找到了一些我拥有的代码并对其进行了测试。答案是“不”
    • @JayKilleen 你是对的。 Ruby 是所有关于聪明的技巧,但它那个聪明(:
    • @NikitaRybak s/that/not that :)
    【解决方案2】:

    在 Ruby 中,if 表达式的条件和then 部分必须由表达式分隔符(即; 或换行符)或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 是一个表达式。事实上,everything 在 Ruby 中是一个表达式,所以它已经可以返回一个值。条件运算符连存在都不需要,更不用说使用了。

    顺便说一句:习惯上将用于提出问题的方法命名为末尾带有问号,如下所示:

    @item.rigged?
    

    这显示了在 Ruby 中使用条件运算符的另一个问题:

    @item.rigged? ? 'Yes' : 'No'
    

    多个问号彼此靠近,很难阅读。

    【讨论】:

      【解决方案3】:

      一行如果:

      <statement> if <condition>
      

      你的情况:

      "Yes" if @item.rigged
      
      "No" if !@item.rigged # or: "No" unless @item.rigged
      

      【讨论】:

      • "No" unless @item.rigged 以防止!
      • 此解决方案的不同之处在于,如果item.rigged 为真,则返回nil 而不是'Yes'。如果条件不满足,单行 if 或 unless 语句返回 nil
      【解决方案4】:

      据我所知

      3 单行

      1. a = 10 if &lt;condition&gt;

      示例:

      a = 10 if true # a = 10
      b = 10 if false # b = nil
      
      1. a = 10 unless &lt;condition&gt;

      示例:

      a = 10 unless false # a = 10
      b = 10 unless true # b = nil
      
      1. a = &lt;condition&gt; ? &lt;a&gt; : &lt;b&gt;

      示例:

      a = true ? 10 : 100 # a = 10
      a = false ? 10 : 100 # a = 100
      

      希望对你有帮助。

      【讨论】:

      • 狗 这是最好的答案——我喜欢它简洁地对比所有三种方式。谢谢!
      【解决方案5】:

      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"
      

      【讨论】:

      • 只有第二个例子是惯用的 ruby​​
      【解决方案6】:

      if else 条件可以用三元运算符覆盖

      @item.rigged? ? 'Yes' : 'No'
      

      【讨论】:

        【解决方案7】:

        为简单起见,如果您需要默认为 nil 的某个值,您可以使用:

        @something.nil? = "No" || "Yes"
        

        【讨论】:

          【解决方案8】:

          您可以使用:

          (@item.rigged) ? “是”:“否”

          如果@item.rigged 为真,它将返回“是”,否则将返回“否”。

          【讨论】:

            【解决方案9】:
            if apple_stock > 1
              :eat_apple
            else
              :buy_apple
            end
            

            上面的语句在ruby中可以用三元语句的形式写成:

            apple_stock > 1 ? :eat_apple : :buy_apple
            

            【讨论】:

              【解决方案10】:

              别忘了它可以从 ruby​​ 标签生成内容:

                v
              <%= @item.rigged? ? "Yes" : "No" %>
              

              打勾(v)表示在html中使用等号生成文本。

              【讨论】:

                猜你喜欢
                • 2012-07-16
                • 2021-04-23
                • 1970-01-01
                • 1970-01-01
                • 2023-03-13
                • 2017-10-22
                • 2018-05-11
                • 2015-05-05
                • 1970-01-01
                相关资源
                最近更新 更多