`&:`는 루비에서 블록을 사용하기 위한 간단한 축약 표현입니다. `index_by(&:name)`와 같은 형태에서 `&:`는 블록을 인자로 전달하는 것을 간소화하는 역할을 합니다.
여기서 `index_by(&:name)`는 객체의 배열을 이름(`name`) 속성을 기준으로 해시 맵 형태로 변환하는 메서드입니다.
즉, 객체의 `name` 속성을 키로 하고 해당 객체를 값으로 갖는 해시를 생성합니다.
아래는 일반적인 `index_by` 메서드의 사용 예시입니다:
items = [
{ name: 'apple', price: 1000 },
{ name: 'banana', price: 2000 },
{ name: 'orange', price: 1500 }
]
items_indexed_by_name = items.index_by { |item| item[:name] }
# 결과:
# {"apple"=>{:name=>"apple", :price=>1000}, "banana"=>{:name=>"banana", :price=>2000}, "orange"=>{:name=>"orange", :price=>1500}}
그런데 `&:`를 사용하면 위의 코드를 간단하게 표현할 수 있습니다:
items_indexed_by_name = items.index_by(&:name)
즉, `&:`는 블록을 사용할 때 더 간결하게 표현할 수 있는 문법적인 편의 기능입니다.