2011-03-08 4 views
3

가능한 중복 :
What does map(&:name) mean in Ruby?루비지도 방법 구문 질문

내가 railscasts more virtual attributes episode을보고 있었다. 그 에피소드에서, 라이언은 내가 이해할 수없는지도 방법 구문을 사용했습니다. 누군가 설명해 주시겠습니까?

tags.map(&:name).join(' ') 

tags는 name 속성이있는 Tag Model의 객체입니다. 나는 이것의 의미를 이해할 수있다 (나는 그렇게 생각한다 :)). 모든 태그 객체의 이름 속성은 배열로 검색되고 ''을 기반으로 조인됩니다. 그러나 단지 tags.map{|tag| tag.name }를 호출하는 것과 같습니다 및 tags.map(:name.to_proc) 것이 속기의 &:name

감사

+2

BTW : & : name 구문은 Ruby> = 1.9 또는 ActiveSupport에서만 작동합니다. –

+1

@ 사이먼, 1.8.7에도 나와 있습니다. – idlefingers

+4

@ 마크, 맞습니다. 1.8.7 코어에 있음 - http://www.ruby-doc.org/core-1.8.7/classes/Symbol.html#M000386 – idlefingers

답변

6

과의 거래는 배열로 모든 태그 이름을 수집 뭐죠.

9

&은 전달한 심볼을 개체의 메서드 이름으로 변환하는 Symbol#to_proc의 바로 가기입니다. 따라서 &:name{ |reciever| receiever.name }으로 변환 된 다음 map 메소드에 전달됩니다.

코드를 훨씬 간결하게 만들고 모든 곳에서 블록을 피하는 좋은 방법입니다.