Зачем использовать унарный оператор для свойства в рубине? т.е. &: первый

Возможный дубликат:
Ruby / Ruby on Rails ярлык с двоеточием с амперсандом

По привычке я стараюсь регулярно читать немного чужой исходный код и комментировать его в целом. Прямо сейчас я читаю базовое приложение sinatra и наткнулся на интересный фрагмент кода (это часть их класса Request)

def accept
  @env['sinatra.accept'] ||= begin 
    entries = @env['HTTP_ACCEPT'].to_s.split(',') 
    entries.map { |e| accept_entry(e) }.sort_by(&:last).map(&:first)
  end
end

Я не понимаю, что делают &: last и &: first?!? Это похоже на безумие!


person Zee Spencer    schedule 09.06.2011    source источник
comment
ближе к stackoverflow.com/questions/1217088/   -  person Simon    schedule 09.06.2011


Ответы (1)


Прочтите ответы на повторяющиеся вопросы о значении и использовании &:.... В этом случае entries - это массив, и есть три метода map, sort_by и map связанных. sort_by(&:last) эквивалентно sort_by{|x| x.last}. map(&:first) совпадает с map{|x| x.first}. Причина, по которой первый map не использует &:..., состоит в том, что (i) получатель accept_entry не является e, и (ii) он принимает аргумент e.

person sawa    schedule 09.06.2011