Где в языке Ruby определены% q,% w и т. Д.? - PullRequest
30 голосов
/ 26 ноября 2010

Большая часть языка Ruby - это методы, а не синтаксис, поэтому я ожидал найти %q, %w и т. Д., Определенные как методы в классе Kernel.Однако их там нет.

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

Ответы [ 4 ]

30 голосов
/ 27 ноября 2010

Программирование 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"

Многие идеи Руби для этих ярлыков исходят из Perl, только в Perl они используют q{}, qq{}, qw{}, qx{} и qr{}. Ведущий q обозначает «цитата», и они обрабатываются и документируются как операторы «цитирования», если я правильно помню. Документация Ruby должна быть расширена, и этот конкретный набор инструментов может определенно использовать некоторую помощь.

25 голосов
/ 26 ноября 2010

Они «жестко запрограммированы» в парсере; см

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

4 голосов
/ 26 ноября 2010

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

1 голос
/ 17 июня 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...