【问题标题】:Create array of symbols创建符号数组
【发布时间】:2011-11-13 08:56:27
【问题描述】:

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

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

我原以为%s 会做我想做的事,但事实并非如此。它只取括号之间的所有内容并从中制作一个大符号。

只是一个小烦恼。

【问题讨论】:

标签: ruby


【解决方案1】:

最初的答案写在 11 年 9 月,但是,starting from Ruby 2.0,有一种更短的方法来创建符号数组!这个字面量:

%i[address city state postal country]

会做你想做的事。

【讨论】:

  • 我总是忘记它代表“实习生”,是“to_sym”的替代品。见codecademy.com/forum_questions/512a675cf116c52d0d00674b
  • 注意 ruby​​ 2 的重点。这在 Ruby Programming Language 书中没有显示,因为它只涵盖了 1.9.3。
  • 当使用 ruby​​ 的 % 文字语法时,我更喜欢使用两个非字母数字字符代替括号,即%i|a b c|
  • 虽然这可以满足您的要求,但任何在您的代码库中看到它的人都必须用谷歌搜索,才能弄清楚 Ruby 这次向我们抛出了什么奇怪的语法。当存在完全可读的替代方案时,我强烈建议避免使用晦涩难懂的语言功能,即 [:address, :city, :state]。
  • @Alex :这几乎不是一个“晦涩的语言功能”,虽然可能是你写评论的时候,但它现在是公认的风格。 rubystyle.guide/#percent-literal-braces
【解决方案2】:

我认为构建符号数组的最简洁方法是使用符号数组。

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

想不出比这更简洁的了。

【讨论】:

  • 你的意思是“字面意思”吗?
  • 我总是喜欢寻找和使用最强大、最简洁的做事方式。对于这个特定的列表,这个答案实际上比我的击键次数少,但是如果列表中有大约 9 个或更多项目,替代方案会更短。感谢您的回答。 :)
  • 我认为在这种情况下可读性胜过一切。这个答案比 %w/to_sym 替代方案更具可读性(IMO)。不要让下一个接手你的东西的开发者想打你的喉咙。
【解决方案3】:

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

%I[ ] 插值符号数组,以空格分隔(Ruby 2.0 之后)

%i[address city state postal country]

最简洁的方法是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 2018-05-06
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多