문제
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를 사용하는 나쁜 방법은 무엇입니까?
해결책
흥미 롭습니다.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 Bug Tracker에 대한 보고서가 있는지 알 수 있습니다.
편집 : 나는 그것이 루비 2.1 버그인지 확인 ( 버그 # 참조)9308 ).현재 Ruby 버전에서 수정되어 다음 버그 수정 릴리스에서 사용할 수 있습니다.
지금은 DO / END 대신 {}
블록 스타일을 사용하기 만하면됩니다.
제휴하지 않습니다 StackOverflow