Где в языке Ruby определены%q, %w и т. Д.?
Большая часть языка Ruby - это методы, а не синтаксис, поэтому я ожидал найти %q
, %w
и т. д., определенные как методы в Kernel
учебный класс. Однако их там нет.
Так где они определены? Они являются ключевыми словами языка?
4 ответа
Они "жестко запрограммированы" в парсере; увидеть
Самый простой способ найти рассматриваемый код - это найти второе вхождение str_sword
(Одиночные кавычки). Весь синтаксис "разделенного ввода" определен там: %Q
, %q
, %W
, %w
, %x
, %r
, а также %s
(обе версии, указанные выше, определяют один и тот же набор входных маркеров с разделителями).
Программирование Ruby упоминает их в главе о строках.
Относится к %q{}
а также %Q{}
является %{}
который так же, как %Q{}
, Также разделители "{}
"Я показываю, может быть совпадающая пара разделителей, так что вы можете использовать []
, ()
, так далее. %q{}
то же самое, что использование одинарных кавычек для разделения строки. %Q{}
аналогично использованию двойных кавычек, позволяющих интерполировать вложенные строки:
%q{foobar} # => "foobar"
%Q{foobar} # => "foobar"
asdf = 'bar' # => "bar"
%q{foo#{asdf}} # => "foo\#{asdf}"
%Q{foo#{asdf}} # => "foobar"
Также есть %w{}
которая разбивает строку, используя пробелы, в массив. Например:
%w[a b c] # => ["a", "b", "c"]
%w{}
не интерполирует встроенные переменные:
%w[a b asdf] # => ["a", "b", "asdf"]
%w[a b #{asdf}] # => ["a", "b", "\#{asdf}"]
А также %r{}
который определяет регулярное выражение:
%r{^foo}.class # => Regexp
Наконец-то есть %x{}
который действует как обратные тики, то есть "``", передавая строку в базовую операционную систему. Думайте об этом как "exec":
%x{date} # => "Fri Nov 26 15:08:44 MST 2010\n"
Многие идеи Ruby для этих ярлыков пришли из Perl, только в Perl они используют q{}
, qq{}
, qw{}
, qx{}
а также qr{}
, Ведущий q
расшифровывается как "цитата", и они обрабатываются и документируются как операторы "цитирования", если я правильно помню. Документация Ruby должна быть расширена, и этот конкретный набор инструментов может определенно использовать некоторую помощь.
Это не ключевые слова, это макросы. Трудно найти официальную ссылку для них, но здесь есть такая.
[Эта заметка является ответом на дискуссию между Уиллом и жестяным человеком 30 мая 2012 года на тему литералов регулярных выражений, похожих на "%r.../" в документах Ruby. Кажется, я не могу добавить комментарий непосредственно к этому обсуждению, но, возможно, кто-то с соответствующими привилегиями может переместить эту информацию туда...]
Общая документация по классу Ruby генерируется из RDoc
комментарии встроены в исходный код для каждого рассматриваемого класса. Эти исходные комментарии имеют правильный синтаксис для литералов регулярных выражений, что можно увидеть при просмотре текстовой документации, показанной через ri Regexp
с использованием локально сгенерированных HTML-версий документации и т. д.
Однако в течение некоторого времени этой весной версия RDoc
используется для генерации страниц документации на http://www.ruby-doc.org/, содержит ошибку, которая вызвала regexp
литералы, чтобы показать как "%r.../"
вместо "/.../"
, Однако по состоянию на 9 июня эта ошибка была исправлена, и страницы "core" и "std-lib" были обновлены, поэтому литералы регулярного выражения снова правильно отображаются на этом сайте.
(Существуют другие категории документации на сайте, которые создаются отдельно, но если на какой-либо из этих страниц все еще отображается неправильный формат, они также должны быть исправлены, когда они в конечном итоге будут перестроены.)