Чи існує буквальне позначення для масиву символів?


170

Мені подобається цей буквальний вираз для масиву рядків:

%w( i can easily create arrays of words )

Мені цікаво, чи є букваль, щоб отримати масив символів. Я знаю, що можу зробити

%w( it is less elegant to create arrays of symbols ).map( &:to_sym )

але було б так чудово просто використовувати буквальне.


Такий підхід був би приємнішим, ніж просто створення масиву символів? Або простий метод? Мех.
Дейв Ньютон

в цьому випадку, який навіть сенс у %wпозначенні?
m_x

IMO масив символів менш захаращений, ніж масив рядків уже, і, як правило, менш поширений. YMMV.
Дейв Ньютон

<troll> здається, що команда рубіну погодилася зі мною з 2 ruby. </troll>
m_x

3
Можливий дублікат Створення масиву символів
sjakobi

Відповіді:


277

Так! Це зараз можливо в Ruby 2.0.0. Один із способів написати це:

%i{foo bar}  # => [:foo, :bar]

Ви також можете використовувати інші роздільники, щоб ви могли також писати %i(foo bar)або, %i!foo bar!наприклад,

Ця функція була спочатку оголошена тут:

http://www.ruby-lang.org/zh_TW/news/2012/11/02/ruby-2-0-0-preview1-released/

Про це згадується в офіційній документації Рубі:

http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings


3
спасибі, @ MarcelJackwerth вже заявив це у коментарі до попередньої прийнятої відповіді, але я прийму твій для нащадків.
m_x

3
Зауважте, що, як і для інших модифікаторів, можна використовувати ряд інших роздільників. наприклад %i[foo bar], %i{foo bar}, %i!foo bar!, %i%foo bar%.
user664833

1
Якщо ви хочете виділити підтримку цього в TextMate або Sublime Text, перегляньте мій модифікований файл .tmLanguage у цьому суті .
Бен Крігер

1
згідно з rubocop , його радять використовувати%i[foo bar]
Mapad

26

На жаль, у Ruby 1.x, на жаль, список доступних % -делімерів обмежений

Modifier    Meaning
%q[ ]       Non-interpolated String (except for \\ \[ and \])
%Q[ ]       Interpolated String (default)
%r[ ]       Interpolated Regexp (flags can appear after the closing delimiter)
%s[ ]       Non-interpolated Symbol
%w[ ]       Non-interpolated Array of words, separated by whitespace
%W[ ]       Interpolated Array of words, separated by whitespace
%x[ ]       Interpolated shell command

занадто погано ... дякую за посилання та список, хоча. не знав %x, здається, читабельнішим ніж позначення
backticks, якими

3
ну, не так прикро для тих, хто ледве може тримати існуючі в голові (це я був би).
tokland

26
У Ruby 2.0 ми отримаємо% i для масивів символів, дивіться: ruby-lang.org/zh_TW/news/2012/11/02/…
Marcel Jackwerth
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.