Ruby 创建符号数组

Ruby 创建符号数组,ruby,Ruby,有没有更干净的方法来做这样的事情 %w[address city state postal country].map(&:to_sym) #=> [:address, :city, :state, :postal, :country] 我本以为%s会做我想做的事,但事实并非如此。它只是把所有的东西都放在括号里,然后用括号做成一个大符号 这只是一个小麻烦。我认为构建符号数组最干净的方法是使用符号数组,这可能会变得过于文字化 fields = [:address, :city, :

有没有更干净的方法来做这样的事情

%w[address city state postal country].map(&:to_sym) 
#=> [:address, :city, :state, :postal, :country]
我本以为
%s
会做我想做的事,但事实并非如此。它只是把所有的东西都放在括号里,然后用括号做成一个大符号


这只是一个小麻烦。

我认为构建符号数组最干净的方法是使用符号数组,这可能会变得过于文字化

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

想不出比这更简洁的了。

最初的答案写在9月11日,但是,有一种更短的方法来创建符号数组!此文字:

%i[address city state postal country]

将完全执行您想要的操作。

%i[]
非插值符号数组,由空格分隔(在Ruby 2.0之后)

%I[]
插入的符号数组,用空格分隔(在Ruby 2.0之后)

%i[地址城市州邮政国家]

最干净的方法是:


%w[地址城市-州-邮政国家]。地图(&:to_-sym)

非常标准。您的实现中是否有任何东西使这种方法不受欢迎?不是“真的”,但Rails经常有这样的语法糖,通过使用它,我感到内心非常温暖。:)自从ruby 2之后,就有了!你的意思是“太文字化”吗?我总是喜欢寻找和使用最有力、最简洁的做事方式。对于这个特定的列表,这个答案实际上比我的要少,但是如果列表中有9个或更多的项,那么另一个选项会更短。谢谢你的回答。:)我认为在这种情况下,可读性胜过一切。这个答案(IMO)比%w/to_sym选项可读性强得多。不要让下一个接手你的东西的开发者想揍你的喉咙。我总是忘了它代表“intern”而不是“to_sym”。请注意ruby 2的重点。这在Ruby编程语言书中没有显示,因为它最多只涵盖1.9.3。当使用Ruby的%文字语法时,我更喜欢使用两个非字母数字字符来代替括号,即
%I | a b c |
,而这正是您想要的,任何在您的代码库中看到这一点的人都必须用谷歌搜索它,以了解Ruby这次向我们抛出了什么bizarro语法。我强烈建议,当存在完全可读的替代方案时,避免使用晦涩难懂的语言功能,例如:[:地址,:城市,:州]。@Alex:这几乎不是一个“晦涩难懂的语言功能”,虽然在你写评论时可能是这样,但现在已经是公认的风格了。