Створіть масив символів


130

Чи є чистіший спосіб зробити щось подібне?

%w[address city state postal country].map(&:to_sym) 
#=> [:address, :city, :state, :postal, :country]

Я б подумав %s, що зробив би те, що хотів, але це не так. Він просто бере все між дужками і робить з нього один великий символ.

Просто незначне роздратування.


1
Це досить стандартно. Чи є щось щодо вашої реалізації, що робить цей метод небажаним?
dwhalen

5
Не "насправді", але у Рейлів часто є синтаксичний цукор, як цей, який змушує мене відчувати теплий пристрій всередині, використовуючи. :)
Дрю

оскільки рубін 2, є! см stackoverflow.com/questions/8816877 / ...
M_X

Відповіді:


357

Оригінальна відповідь була написана ще у вересні 11 року, але, починаючи з Ruby 2.0 , існує коротший спосіб створити масив символів! Цей буквальний:

%i[address city state postal country]

зробить саме те, що ви хочете.


3
Я завжди забуваю, що це означає "стажер", альтернативу "to_sym". Дивіться codecademy.com/forum_questions/512a675cf116c52d0d00674b
A5308Y

Зверніть увагу на наголос рубіну 2. Це не відображено в книзі мови програмування Ruby, оскільки воно охоплює лише 1.9.3.
Донато

Під час використання синтаксису% буквальний рубін, я вважаю за краще використовувати два не алфавітно-цифрові символи замість дужок, тобто%i|a b c|
Епіген

6
Хоча це робить те, що ви хочете, кожен, хто бачить це у вашій кодовій базі, повинен буде йому знайти Google, щоб зрозуміти, що химерний синтаксис Ruby накинув на нас цього разу. Я настійно рекомендую уникати незрозумілих особливостей мови, коли існують ідеально зрозумілі альтернативи, тобто [: address,: city,: state].
Олексій

Дякую, це справді корисно.
sonnyhe2002

91

З ризиком стати занадто буквальним, я думаю, що найчистішим способом побудови масиву символів є використання масиву символів.

fields = [:address, :city, :state, :postal, :country]

Не можу придумати нічого більш короткого, ніж це.


11
Ви маєте на увазі "занадто буквально"?
Ендрю Грімм

Мені завжди подобається знаходити та використовувати найпотужніші та стисліші способи ведення справ. Ця відповідь насправді менше натискань клавіш, ніж моя для цього конкретного списку, але зі списком ~ 9 і більше предметів, альтернатива була б коротшою. Дякую за відповідь. :)
Дрю

4
Я думаю, що в цьому випадку читання читає все більше. Ця відповідь набагато читає (IMO), ніж альтернатива% w / to_sym. Не змушуйте чергового розробника, який займеться вашими речами, бажаючи вдарити вас у горло.
Брюс Хаббард

3

%i[ ] Неінтерпольований масив символів, розділений пробілом (після Ruby 2.0)

%I[ ] Інтерпольований масив символів, розділений пробілом (після Ruby 2.0)

%i[address city state postal country]

найчистіший спосіб зробити це:

%w[address city state postal country].map(&:to_sym)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.