Что означает params в блоке строк (<< - BLOCK, param1, param2)? - PullRequest
3 голосов
/ 23 марта 2012

Я читаю некоторый исходный код на https://github.com/plataformatec/devise и обнаружил эту строку кода:

class_eval <<-URL_HELPERS, __FILE__, __LINE__ + 1

Что параметры __FILE__ и __LINE__ + 1 делают в объявлении блока (что изменяетсяв отношении блока строк без этих параметров)?

https://github.com/plataformatec/devise/blob/master/lib/devise/controllers/url_helpers.rb#L47

Спасибо

Ответы [ 2 ]

5 голосов
/ 23 марта 2012

Эти параметры принадлежат методу class_eval , а не документу здесь . Обычной практикой является обеспечение того, чтобы ошибка, которая может вызвать уклоненный код, была показана со ссылкой на текущий файл и с правильным номером строки.

2 голосов
/ 23 марта 2012

В качестве альтернативного примера, показывающего, как работают HEREDOC, на днях в IRB я написал:

require 'nokogiri'
doc = Nokogiri.XML(<<ENDXML,&:noblanks)
  ...gobs and gobs of pasted xml...
ENDXML

Еще более безумным является этот законный синтаксис для одновременной передачи нескольких строк HEREDOC:

p( <<END1, <<-END2, <<END3 )
  This indented text is part of
  the first parameter, END1
END1
And this text is part of param2
  whose ending sigil may be indented
  END2
and finally this text
is part of
the third parameter
END3
#=> "  This indented text is part of\n  the first parameter, END1\n"
#=> "And this text is part of param2\n  whose ending sigil may be indented\n"
#=> "and finally this text\nis part of\nthe third parameter\n"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...