【问题标题】:private def error on ruby 2.1ruby 2.1 上的私有 def 错误
【发布时间】:2014-01-28 13:14:03
【问题描述】:

def 现在返回方法名称。所以你可以写

private def foo
  p "foo is private"
end

但我在使用更困难的方法时遇到了错误:

2.1.1p2 :036 >   private def refresh_prices
2.1.1p2 :037?>       orders = order_items.includes(:book)
2.1.1p2 :038?>       sum = 0
2.1.1p2 :039?>       orders.each do |t|
2.1.1p2 :040 >             t.price = t.book.price
2.1.1p2 :041?>           sum += t.price * t.quantity
2.1.1p2 :042?>           t.save
2.1.1p2 :043?>         end
2.1.1p2 :044?>       self.total_price = sum
2.1.1p2 :045?>       save
2.1.1p2 :046?>     end
SyntaxError: (irb):39: syntax error, unexpected keyword_do_block, expecting keyword_end
    orders.each do |t|
                  ^

没有私有这个 def 返回 :refresh_prices。任何人都可以解释为什么它会失败,这是使用私有 def 的坏方法吗?

【问题讨论】:

    标签: ruby ruby-2.1


    【解决方案1】:

    这很有趣。看起来 do/end 块导致了语法错误。

    如果您使用 {} 样式的块,它会按预期工作。

    private def refresh_prices
              orders = order_items.includes(:book)
              sum = 0
              orders.each { |t|
                t.price = t.book.price
                sum += t.price * t.quantity
                t.save
              }
              self.total_price = sum
              save
            end
    # => Object 
    

    我相信它可以被认为是一个错误。我会看看是否有任何关于 Ruby 错误跟踪器的报告。


    编辑:我确认这是一个 Ruby 2.1 错误(请参阅 bug #9308)。它已在当前 Ruby 版本中修复,因此将在下一个错误修复版本中提供。

    现在,只需使用 {} 块样式而不是 do/end。

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多