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