创建符号数组

Dre*_*rew 125 ruby

有没有更清洁的方法来做这样的事情?

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

我想我会%s做我想做的事,但事实并非如此.它只需要括号之间的所有内容,并使其中的一个大符号.

只是一个小小的烦恼.

Joo*_*aij 347

我在11年9月写过原始答案,但是从Ruby 2.0开始,有一个更短的方法来创建一个符号数组!这个文字:

%i[address city state postal country]
Run Code Online (Sandbox Code Playgroud)

完全符合你的要求.

  • 只是为了更新,这是Ruby 2.0.0的一部分 (7认同)
  • 虽然这可以满足您的需求,但是在您的代码库中看到这一点的任何人都必须通过谷歌来了解Ruby这次给我们带来了什么奇怪的语法.我强烈建议在存在完全可读的替代方案时避免使用模糊的语言功能,即[:address,:city,:state]. (6认同)
  • 我总是忘记它代表"实习生"替代"to_sym".见http://www.codecademy.com/forum_questions/512a675cf116c52d0d00674b (3认同)
  • @Alex:这几乎不是一个“晦涩的语言功能”,虽然也许是在你写评论时,但它是现在公认的风格。https://rubystyle.guide/#percent-literal-braces (2认同)

Joo*_*aij 89

由于存在过于字面化的风险,我认为构造符号数组的最简洁方法是使用符号数组.

fields = [:address, :city, :state, :postal, :country]
Run Code Online (Sandbox Code Playgroud)

想不出更简洁的东西.

  • 你的意思是"太字面"吗? (11认同)
  • 在这种情况下,我认为可读性胜过一切.这个答案比%w/to_sym替代品更具可读性(IMO).不要让下一个开发人员接管你的东西想要打你的喉咙. (4认同)