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


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.