문제

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 대신 {} 블록 스타일을 사용하기 만하면됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top