private -6ren">
gpt4 book ai didi

ruby - ruby 2.1 上的私有(private) def 错误

转载 作者:数据小太阳 更新时间:2023-10-29 08:00:05 24 4
gpt4 key购买 nike

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|
^

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

最佳答案

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

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

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 版本中修复,因此将在下一个错误修复版本中提供。

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

关于ruby - ruby 2.1 上的私有(private) def 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21029497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com