2010-02-12 4 views
2

가능한 중복 구성 :
Using do block vs brackets {}
What is the difference or value of these block coding styles in Ruby?기본 루비 질문 : {} 대 음주/끝 블록

이유는 무엇입니까 :

test = [1, 1, 1].collect do |te| 
    te + 10 
end 
puts test 

작품, 그러나 :

puts test = [1, 1, 1].collect do |te| 
    te + 10 
end 

그럼에도 불구하고이 작품 다음 DO/종료 구조와 차이가

puts test = [1, 1, 1].collect { |te| 
    te + 10 
} 

가있는 {} 내가 인식하지 오전 블록 구성?

+0

이 질문은 http://StackOverflow.Com/questions/533008/ 및 HTTP의 정확한 중복 :

명시 적 괄호 아래 루비가 위의 문장을 해석하는 방식의 차이를 보여 // StackOverflow.Com/questions/2122380/ 및 아마도 다른 십여 가지. –

답변

10

"작동하지 않는"경우 블록은 실제로 collect 호출이 아닌 puts 호출에 연결됩니다. {}do보다 더 엄격하게 바인딩됩니다.

puts(test = [1, 1, 1].collect) do |te| 
    te + 10 
end 

puts test = ([1, 1, 1].collect {|te| 
    te + 10 
}) 
+0

이런 종류의 행동을 예측하기 위해 따라야 할 일반적인 규칙이 있습니까? –

+0

글쎄, 우선 순위 규칙 (http://www.ruby-doc.org/docs/ProgrammingRuby/language.html#table_18.4)을 확인하십시오. 그러나 어림짐작으로, 나는 항상 do ... end를 코드 블록으로, {}을 함수로 취급한다. 또한 절대로 {} 안에 끝을 넣지 마십시오. – Shadowfirebird