Rails - использование% W
У меня есть следующее, которое хорошо работает:
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 слаб с этими типами символов.
Спасибо
Ответы
Ответ 1
%w
создает "массив слов" и использует пробелы для разделения каждого значения. Поскольку вы хотите разделить на другое значение (в данном случае пробелы вне наборов кавычек), просто используйте стандартный массив:
['Upload a photo', 'Billing Info', 'Confirmation Screen']
Ответ 2
%w()
- это "массив слов" - элементы разделены пробелами.
Есть и другие% вещей:
%r()
- это еще один способ написать регулярное выражение.
%q()
- это еще один способ написать строку с одним кавычком (и может быть многострочным, что полезно)
%q()
дает строку с двумя кавычками
%x()
- это команда оболочки.
Ответ 3
Вы также можете использовать обратную косую черту для избежания пробелов:
%[email protected]\ bar [email protected]
совпадает с:
[ 'foo bar', 'bang' ]
В вашем примере я бы не использовал нотацию %w
, потому что это не так понятно.
PS. Мне нравится смешивать символы-разделители, просто чтобы раздражать членов команды:)
Вот так:
%w?foo bar?
%w|foo bar|
%w\foo bar\
%w{foo bar}
Ответ 4
%w[hello billing confirmation]
- синтаксический сахар для ["hello", "billing", "confirmation"]
. Он сообщает Ruby разбивать входную строку на слова на основе пробелов и возвращать массив слов.
Если ваш конкретный пример использования означает, что значения в массиве имеют пробелы, вы не можете использовать %w
.
В вашем случае достаточно ['Upload a photo', 'Billing Info', 'Confirmation Screen']
.
Ответ 5
Одной из причин, по которой вы хотите использовать% w (xxx) над [ "xxx", "xx1" ], является то, что с% w вы можете отформатировать содержимое для удобства чтения. Например, если у вас много статических значений, жестко закодированных в массиве, их гораздо легче читать, когда они сложены следующим образом:
assets.precompile += %w(
bootstrap-datepicker.js
datepicker.css
flower_chart.js
jquery.flower-sort.js
bootstrap-timepicker.js
bootstrap-timepicker.css
admin.css
admin.js
flower_feature.js
jquery.flower.tooltip.min.js
jquery.infinite-flowers.js
data-flowers.bootstrap.min.js
jquery.monkey-flowers.min.js )
чем сплющенные и окруженные кавычками и запятыми, такими как
["bootstrap-datepicker.js", "datepicker.css", "flower_chart.js", "jquery.flower-sort.js", "bootstrap-timepicker.js", "bootstrap-timepicker.css", "admin.css", "flower_feature.js", "jquery.flower.tooltip.min.js", "jquery.infinite-flowers.js", "data-flowers.bootstrap.min.js", "jquery.monkey-flowers.min.js"]
оба результата приводят к тому же самому массиву.