Где в языке 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" были обновлены, поэтому литералы регулярного выражения снова правильно отображаются на этом сайте.

(Существуют другие категории документации на сайте, которые создаются отдельно, но если на какой-либо из этих страниц все еще отображается неправильный формат, они также должны быть исправлены, когда они в конечном итоге будут перестроены.)

Другие вопросы по тегам