Ruby에서 블록이란 무엇을 의미합니까? Smalltalk와 유사하지만 메시지를 보낼 수는 없습니다. 스몰 토크에서 예를 들어Ruby에서 블록이 Smalltalk에 비해
:
[:x | x + 3] value: 3
반환 6. 그러나 루비 :
{|x| x + 3}.call 3
는 구문 에러가 발생합니다. , 블록, 블록 아닌 루비 그래서
irb(main):025:0> ->(x){x+3}.call 3
=> 6
을하지만 람다는 블록 :
글쎄, 당신은하지만, 루비에서 람다에게 메시지를 전달할 수 있습니다? 사실입니까? 루비 람다와 스몰 토크 블록 사이에 어떤 차이점이 있습니까? 이것이 사실이라면 루비 블록은 무엇입니까?
업데이트 : 함께 일부 인터넷 검색과
주석에서아래 답변은, 내가 루비 블록의 더 이해가 같아요. 루비에서 보통 코드는 값을 평가하고 모든 값은 객체입니다. 그러나 블록은 값을 평가하지 않습니다. 그래서 그것은 대상이 아닙니다. 대신 부분의 개체로 작동 할 수 있습니다. 예를 들어, {| x | x + 3}는 객체 proc {| x | x + 3}.
하지만 혼란 스러웠습니다. 스몰 토크에서는 거의 모든 표현식을 객체로 나눌 수 있습니다 (변수에 대한 바인딩은 예외입니다). Ruby에서 더 많은 예외가있는 것으로 보입니다.
나는 수익률이 부족하다고 생각합니다. 나는 블록에 대해 잘 알고 있지 않다. – Earlz
yield를 지적 해 주셔서 감사합니다. 이 관련 질문을 찾았습니다 : http://stackoverflow.com/questions/764134/rubys-yield-feature-in-relation-to-computer-science – weakish