Что означает карта (&: name) в Ruby? - PullRequest
477 голосов
/ 01 августа 2009

Я нашел этот код в RailsCast :

def tag_names
  @tag_names || tags.map(&:name).join(' ')
end

Что означает (&:name) в map(&:name)?

Ответы [ 15 ]

2 голосов
/ 08 декабря 2017

Хотя у нас уже есть отличные ответы, глядя на новичка, я хотел бы добавить дополнительную информацию:

Что означает карта (&: name) в Ruby?

Это означает, что вы передаете другой метод в качестве параметра функции map. (На самом деле вы передаете символ, который превращается в процесс. Но это не так важно в данном конкретном случае).

Важно то, что у вас есть method с именем name, который будет использоваться методом карты в качестве аргумента вместо традиционного стиля block.

1 голос
/ 12 февраля 2019

Он в основном выполняет вызов метода tag.name для каждого тега в массиве.

Это упрощенная рубиновая стенография.

1 голос
/ 20 декабря 2016

это значит

array.each(&:to_sym.to_proc)
1 голос
/ 30 июня 2016

Здесь :name - это символ, указывающий на метод name объекта тега. Когда мы передаем &:name в map, он будет обрабатывать name как объект proc. Для краткости tags.map(&:name) действует как:

tags.map do |tag|
  tag.name
end
0 голосов
/ 27 июня 2016

То же, что и ниже:

def tag_names
  if @tag_names
    @tag_names
  else
    tags.map{ |t| t.name }.join(' ')
end
...