Что% {} делает в Ruby? - PullRequest
       1

Что% {} делает в Ruby?

25 голосов
/ 14 марта 2011

В посте Мэтта о тестах на высыхание огурцов , Аслак предлагает следующее.

Когда у меня много цитат, я предпочитаю:

Учитывая% {я ввожу «# {User.first.username}» в «username»}

Как называется конструкция %{CONTENT}? Будет ли кто-то возражать, ссылаясь на это в какой-то документации? Я не уверен, как искать его.

Есть также материал о %Q. Это эквивалентно просто %? Что из фигурных скобок? Вы можете использовать квадратные скобки? Они функционируют по-разному?

Наконец, как называется конструкция #{<ruby stuff to be evaluated>}? Есть ли ссылка на это где-то в документации?

Ответы [ 3 ]

13 голосов
/ 14 марта 2011
  1. "Процентные литералы", как правило, являются хорошим способом поиска информации в Google:

  2. #{} называется "интерполяцией строк".

12 голосов
/ 30 марта 2017

Ни один из других ответов на самом деле не отвечает на вопрос.

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

%{stuff}
%[stuff]
%?stuff?

и т. Д.Это позволяет вам помещать двойные кавычки, одинарные кавычки и т. Д. В строку без экранирования:

%{foo='bar with embedded "baz"'}

возвращает буквенную строку: foo = 'bar со встроенным "baz"'

Знак процентаможет сопровождаться модификатором буквы, чтобы определить, как строка интерполируется.Например, %Q[ ] - это интерполированная строка, %q[ ] - это неинтерполированная строка, %i[ ] - это неинтерполированный массив символов и т. Д. Так, например:

 %i#potato tuna#

возвращает этот массивсимволов:

[:potato, :tuna]

Подробности здесь: Wikibooks

9 голосов
/ 14 марта 2011

#{1+1} называется Строковая интерполяция .

I и Wikibooks относятся к % как к «% нотации». Ссылка здесь .Обозначение % принимает любой разделитель, если он не алфавитно-цифровой.Он также может принимать модификаторы (вроде того, как регулярные выражения принимают параметры), одним из которых, что интересно, является то, разрешите ли вы интерполяцию строк в стиле #{} (это также включено по умолчанию).*% затем делает что-то особенное, придавая этой нотации определенную, хотя и немного загадочную для новичков, краткость.Например, %w{hello world} возвращает массив ['hello','world'].%s{hello} возвращает символ :hello.

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