Подтвердить что ты не робот

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 слаб с этими типами символов.

Спасибо

4b9b3361

Ответ 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"]

оба результата приводят к тому же самому массиву.