【问题标题】:Splitting a symbol, in the same manner as one would split a string拆分符号,方式与拆分字符串相同
【发布时间】:2013-05-02 12:30:56
【问题描述】:

是否可以在不先将其转换为字符串的情况下拆分符号?比如我试过

:split_this.split("_")

它只返回一个错误。我查看了Symbol class reference,但所有示例都使用to_s 将其转换为字符串。

我知道我可以将它转换为字符串,拆分它,并将两个子字符串转换为符号,但这似乎有点麻烦。有没有更优雅的方法来做到这一点?

【问题讨论】:

  • 您的预期结果是什么?
  • :split_this.to_s.split("_").map(&:intern) 对我来说似乎并不麻烦。许多符号方法都是这样工作的。

标签: ruby split symbols


【解决方案1】:

自从 Ruby 1.9 以来,Symbol 类中添加了一些字符串的功能,但并没有那么多。我认为你能做的最好的事情是:

:symbol_with_underscores.to_s.split('_').map(&:to_sym)

你可以把它变成一个Symbol 方法:

class Symbol
  def split(separator)
    to_s.split(separator).map(&:to_sym)
  end
end

:symbol_with_underscores.split('_')
# => [:symbol, :with, :underscores]

【讨论】:

    【解决方案2】:

    将符号视为数字。因为符号在内部存储为int numbers。因此它们没有与字符串相关的方法。

    【讨论】:

    • 实际上,在 Ruby 中,符号通常作为字符串进行操作,例如 ActiveRecord 的动态查找器。核心库本身为符号定义了一些字符串方法,即downcasecapitalize
    • @toro2k 每个后续的 Rails 版本都没有那么神奇了。此外,过度使用字符串到符号的转换导致CVE-2013-1854 Symbol DoS vulnerability in Active Record
    猜你喜欢
    • 1970-01-01
    • 2015-08-30
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多