Я смотрю на документацию для FileUtils.
Я смущен следующей строкой:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
Что %w
значит? Можете ли вы указать мне на документацию?
%w(foo bar)
это ярлык для ["foo", "bar"]
. Это означает, что записывать массив строк, разделенных пробелами, вместо запятых и без кавычек - это нотация. Вы можете найти список способов написания литералов в быстрой ссылке на zenspider .
%w(ab\ c def) # => ["ab c", "def"]
Я думаю о
%w()
«словесном массиве» - элементы разделяются пробелами, и он возвращает массив строк.Есть другие% литералы:
%r()
это еще один способ написать регулярное выражение.%q()
это еще один способ написать строку в одинарных кавычках (и может быть многострочным, что полезно)%Q()
дает строку в двойных кавычках%x()
это команда оболочки%i()
дает массив символов (Ruby> = 2.0.0)%s()
превращаетсяfoo
в символ (:foo
)Я не знаю других, но там могут быть некоторые скрывающиеся ...
источник
%i()
для генерации массива символов.%()
(или%[]
или%{}
), который дает строку в двойных кавычках и экранирует двойные кавычки, например%Q()
. Например%("sender name" <sender@example.com>) # => "\"sender name\" <sender@example.com>"
Также есть
%s
возможность создавать любые символы, например:Начиная с Ruby 2.0.0 у вас также есть:
источник
%W
и%w
позволит вам создать массив строк без кавычек и запятых.источник
Хотя это старый пост, вопрос все время поднимается, и ответы не всегда кажутся мне ясными, так что вот мои мысли:
%w
и%W
являются примерами типов ввода с разделителями , которые относятся к массивам. Есть и другие типы , которые включают в себя%q
,%Q
,%r
,%x
и%i
.Разница между заглавной и строчной версиями заключается в том, что она дает нам доступ к функциям одинарных и двойных кавычек. С одинарными кавычками и (строчными буквами)
%w
у нас нет интерполяции кода (#{someCode}
) и ограниченного диапазона управляющих символов, которые работают (\\
,\n
). С двойными кавычками и (в верхнем регистре)%W
у нас есть доступ к этим функциям.В качестве разделителя может использоваться любой символ, а не только открытая скобка. Поиграйте с приведенными выше примерами, чтобы убедиться в этом.
Для полной записи с примерами
%w
и полным списком, escape-символов и разделителей, взгляните на " Ruby -% w против% W - секреты раскрыты! "источник
Вместо того,
%w()
чтобы использовать%w[]
Согласно руководству по стилю Ruby:
Предпочитайте% w синтаксису литерального массива, когда вам нужен массив слов (непустые строки без пробелов и специальных символов в них). Примените это правило только к массивам с двумя или более элементами.
Используйте скобки, которые наиболее подходят для различных типов процентов литералов.
[]
для литералов массива (%w, %i, %W, %I
), поскольку он выровнен со стандартными литералами массива.Подробнее читайте здесь .
источник
Выдержано из документации для строк процентов на http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :
источник
Мне дали несколько столбцов из таблицы CSV с полными именами пользователей, и мне нужно было сохранить форматирование с пробелами. Самый простой способ получить их при использовании ruby - это сделать:
Это выдвигает на первый план то, что
%()
создает строку как"Porter Smith\nJimmyJones\nRonald Jackson"
и, чтобы получить массив Выsplit
строка на"\n"
["Porter Smith", "Jimmy Jones", "Ronald Jackson"]
Таким образом, чтобы ответить на оригинальный вопрос OP, они могли бы написать,
%(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')
если бы это случилось,space
когда вы хотите,space
чтобы они существовали в окончательном выводе массива.источник