Я переглядаю документацію для FileUtils.
Мене бентежить наступний рядок:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
Що %wозначає? Чи можете ви вказати мені документацію?
Я переглядаю документацію для FileUtils.
Мене бентежить наступний рядок:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
Що %wозначає? Чи можете ви вказати мені документацію?
Відповіді:
%w(foo bar)- це ярлик для ["foo", "bar"]. Значить, це позначення писати масив рядків, розділених пробілами, а не коми та без лапок навколо них. Список способів написання літералів ви можете знайти в Quickref 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те, що дозволяє створювати будь-які символи, наприклад:
%s|some words| #Same as :'some words'
%s[other words] #Same as :'other words'
%s_last example_ #Same as :'last example'
З Ruby 2.0.0 ви також маєте:
%i( a b c ) # => [ :a, :b, :c ]
%i[ a b c ] # => [ :a, :b, :c ]
%i_ a b c _ # => [ :a, :b, :c ]
# etc...
%Wі%w дозволяють створювати масив рядків без використання лапок і коми.
Хоча це старий пост, питання продовжують виникати, і відповіді не завжди здаються мені зрозумілими, ось ось мої думки:
%wі %Wє прикладами загальних типів розділеного вводу , що стосуються масивів. Є й інші типи , які включають в себе %q, %Q, %r, %xі %i.
Різниця між верхньою та нижньою літерами полягає в тому, що вона дає нам доступ до особливостей одинарних та подвійних лапок. За допомогою одиничних лапок та (малих літер) у %wнас немає інтерполяції коду ( #{someCode}) та обмеженого кола символів втечі, які працюють ( \\, \n). З подвійними лапками і (прописними буквами) , %Wми дійсно маємо доступ до цих функцій.
Використовуваний роздільник може бути будь-яким символом, а не лише відкритими дужками. Пограйте з наведеними вище прикладами, щоб побачити це по суті.
Для повного запису з прикладами %wта повного списку, рятувальних символів та роздільників, подивіться на " Ruby -% w vs% W - секрети розкриті! "
Замість цього %w()ми повинні використовувати%w[]
Відповідно до керівництва зі стилю Ruby:
Віддайте перевагу% w синтаксису буквального масиву, коли вам потрібен масив слів (не порожні рядки без пробілів та спеціальні символи в них). Застосовуйте це правило лише до масивів з двома або більше елементами.
# bad
STATES = ['draft', 'open', 'closed']
# good
STATES = %w[draft open closed]
Використовуйте дужки, які є найбільш підходящими для різних видів відсоткових літералів.
[]для літералів масиву ( %w, %i, %W, %I), оскільки він узгоджується зі стандартними літералами масиву.
# bad
%w(one two three)
%i(one two three)
# good
%w[one two three]
%i[one two three]
Детальніше читайте тут .
Витягнуто з документації для Percent Strings на веб-сторінці http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :
Крім% (...), який створює String,% може створювати інші типи об'єктів. Як і у рядках, велика літера дозволяє здійснювати інтерполяцію та уникнуті символи, тоді як маленька літера їх вимикає.
Це типи відсоткових рядків у рубіні:
...
% w : масив рядків
Мені було надано купу стовпців із таблиці CSV з повними іменами користувачів, і мені потрібно було зберегти форматування з пробілами. Найпростіший спосіб я знайшов їх за допомогою рубіну:
names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')
На цьому наголошує , що %()створює рядок , як "Porter Smith\nJimmyJones\nRonald Jackson"і отримати масив , splitрядок в"\n" ["Porter Smith", "Jimmy Jones", "Ronald Jackson"]
Отже, щоб відповісти на початкове запитання ОП, вони також могли написати, %(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')якби це сталося, spaceколи ви хочете, spaceщоб існувало в кінцевому висновку масиву.