Ruby on Rails 3: вопрос программирования - PullRequest
2 голосов
/ 22 сентября 2010

Правильно:

@teammates = Roster.all.sort_by(&:level)

Сбой:

@teammates = Roster.all.sort_by(:level)

Что делает & infront уровня: Это действует как ссылка, как в C ++?

Заранее спасибо

1 Ответ

1 голос
/ 22 сентября 2010

Запись &symbol - это некоторый синтаксический сахар, добавленный Rails.Он известен как символ to_proc и может использоваться против любого метода, который ожидает получить Proc.

Array.sort_by ожидает proc, и именно поэтому простое прохождение символа терпит неудачу.Синтаксис символа to_proc организует для получателя, в этом случае sort_by, чтобы получить процесс, содержащий имя метода для вызова в рамках процесса.

@teammates = Roster.all.sort_by(&:level)

Эквивалентно

@teammates = Roster.all.sort_by{ |obj| obj.level }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...