Какова терминология Ruby для этой части итератора? - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь понять, как называется | n |находится в коде ниже.

array = [1,2,3]
array.map { |n| n * 2 }
# [2, 4, 6]

Я знаю, что он делает и как работает, но называется ли он «заполнителем» или имеет официальное имя (может быть, «итератор»)? Я хотел бы знать, как это поможет мне запомнить это и обсудить мой код лучше.

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Парсер CRuby (parse.y) вызывает его block_param_def ( определение параметров блока ). В конце концов, вы определяете параметры блока.

В «Языке программирования Ruby» Дэвида Фланагана и Юкихиро Мацумото это также называется параметрами блока (5.4.1 Синтаксис блока, страница141):

Блоки могут быть параметризованы так же, как и методы. Параметры блока разделяются запятыми и разделяются парой символов вертикальной черты (|) […]

A аргумент блока будет &blk, как в def foo(&blk) где blk будет ссылаться на блок, который обычно является анонимным, если он передается как часть вызова метода. Важное отличие, которое книга также упоминает в сноске (6.4.5 Block Arguments, стр. 190):

  • Мы используем термин «аргумент блока» вместо «параметра блока» для параметров методас префиксом &. Это связано с тем, что фраза «параметр блока» относится к списку параметров (например, |x|) самого блока.

Возможно, это немного странно и не совсем логично в качестве аргументовblock (например, 1, 2 и 3 в вашем примере) также можно назвать аргументами блока.

0 голосов
/ 01 октября 2019

Товар будет хорошим описанием. Если вы посмотрите документацию Ruby для метода .map , вы увидите, что он описан как {| item |блок}. Таким образом, в трубе (|) находится «элемент», затем следующий блок кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...