Rails - Использование% W - PullRequest
       1

Rails - Использование% W

37 голосов
/ 16 декабря 2010

У меня есть следующее, что хорошо работает:

def steps
    %w[hello billing confirmation]
end

steps.first

Но я хочу сделать это:

  def step_title
    %w['Upload a photo' 'Billing Info' 'Confirmation Screen']
  end

steps.first

Как% w допускает это? Я пробовал поиск в Google, но Google слаба с этими типами символов.

Спасибо

Ответы [ 4 ]

52 голосов
/ 16 декабря 2010

%w создает «массив слов» и использует пробелы для разделения каждого значения.Поскольку вы хотите разделить другое значение (в данном случае, пробел за пределами набора кавычек), просто используйте стандартный массив:

['Upload a photo', 'Billing Info', 'Confirmation Screen']
32 голосов
/ 15 февраля 2013

%w() - это «массив слов» - элементы разделяются пробелами.

Есть и другие вещи:

%r() - это еще один способ написать регулярное выражение.

%q() - это другой способ написать строку в одинарных кавычках (и может быть многострочным, что полезно)

%Q() дает строку в двойных кавычках

%x() - это команда оболочки.

10 голосов
/ 16 декабря 2010

Вы также можете использовать обратную косую черту для выхода из пробелов:

%w@foo\ bar bang@

- это то же самое, что и:

[ 'foo bar', 'bang' ]

В вашем примере я бы не использовал обозначение %w,потому что это не так ясно.

PS.Мне нравится смешивать символы-разделители, просто чтобы раздражать членов команды :) Вот так:

%w?foo bar?
%w|foo bar|
%w\foo bar\
%w{foo bar}
4 голосов
/ 16 декабря 2010

%w[hello billing confirmation] является синтаксическим сахаром для ["hello", "billing", "confirmation"].Он говорит Ruby разбить входную строку на слова на основе пробела и вернуть массив слов.

Если ваш конкретный вариант использования означает, что значения в массиве могут иметь пробелы, выне может использовать %w.

В вашем случае достаточно ['Upload a photo', 'Billing Info', 'Confirmation Screen'].

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