Где на языке Ruby указано% q,% w и т.д., Определенное?

Так много языка Ruby - это методы, а не синтаксис, поэтому я ожидал найти %q, %w и т.д., определенные как методы класса Kernel. Однако их там нет.

Итак, где они определены? Являются ли они ключевыми словами на языке?

Ответы

Ответ 1

Они "жестко закодированы" в синтаксическом анализаторе; см

Самый простой способ найти этот код - искать второе вхождение str_sword (Single-quoted WORDs). Все синтаксисы "ограниченного ввода" определены там: %Q, %Q, %W, %W, %x, %r и %s (обе версии, упомянутые выше, определяют один и тот же набор разделителей входные маркеры).

Ответ 2

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

Ответ 3

Они не ключевые слова, они макросы. Трудно найти официальную ссылку для них, но там здесь.

Ответ 4

[Это примечание в ответ на дискуссию между Волей и Оловом Мужчина 30 мая 2012 года на тему регулярных выражений выглядит как "% r.../" в документах Ruby. Кажется, я не могу добавить комментарий непосредственно на эту дискуссию, но, возможно, с соответствующим privs могут переместить эту информацию там....]

Общая документация класса Ruby создается из RDoc комментариев, встроенных в исходный код для каждого рассматриваемого класса. Эти исходные комментарии имеют правильный синтаксис для литералов регулярных выражений, как это видно при просмотре текстовой документации, отображаемой с помощью ri Regexp, с использованием локальных HTML-версий документации и т.д.

Однако в течение периода времени spring версия RDoc использовалась для создания страниц документации на www.ruby-doc.org содержала ошибку, которая привела к тому, что литералы regexp отображались как "%r.../" вместо "/.../". Однако по состоянию на 9 июня эта ошибка была исправлена, а страницы "core" и "std-lib" были регенерированы, поэтому литералы регулярного выражения отображаются правильно на этом сайте.

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