2011-03-14 3 views
22

В сообщение Мэтта о drying up cucumber tests, Aslak suggests следующее.Что делает% {} в Ruby?

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

Учитывая% {вхожу «# {} User.first.username» в «имя пользователя»}

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

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

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

ответ

14
  1. "Процент литералов", как правило, хороший способ Google некоторую информацию:

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

+0

Если какой-либо из тех, кто объясняет с '% {' в 'Учитывая% {вхожу«# {} User.first.username»в«имя пользователя»}' делает я не мог» t найти его. Является ли '% {' опечаткой или частью DSL Cucumber? –

+2

Это эквивалентно двойной кавычки, за исключением того, что вам не нужно избегать двойных кавычек внутри (подумайте «Учитывая», я ввожу \ «# {User.first.username} \" in \ "username \" "' –

+1

Приятно знать о процентном литерале, символ открытия и закрытия может быть почти любым. Поэтому '% {Some text}', '% [Some text]', но также '% # Some text #' и '% 'Some text'' и даже '%% Некоторые тексты%' –

8

The #{1+1} называется String Interpolation.

I, и Wikibooks, ссылаются на материал % как на «% нотации». Reference here. Обозначение % принимает любой разделитель, если он не является буквенно-цифровым. Он также может принимать модификаторы (вроде как регулярные выражения принимают параметры), одним из которых, что интересно, является то, разрешите ли вы использовать #{} -строчную интерполяцию строк (это также включено по умолчанию).

% затем делает некоторые специальные вещи к нему, придавая этому обозначению некоторые четкие, если немного загадочные для новичков, терпение. Например, %w{hello world} возвращает массив ['hello','world']. %s{hello} возвращает символ :hello.

5

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

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

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

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

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

возвращает буквенную строку: бар Foo = 'со встроенным «Baz "'

Знак процента может сопровождаться модификатором букв, чтобы определить, как строка интерполируется.

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

Смежные вопросы