【问题标题】:How to create a symbol from a string that has whitespaces?如何从具有空格的字符串创建符号?
【发布时间】:2013-02-27 12:13:17
【问题描述】:

我正在为电影名称存储创建一个 Ruby 哈希。

当哈希的键是包含空格的字符串时,它工作得很好。

如:

movies = {"Avatar" => 5, "Lord of the rings" => 4, "Godfather" => 4}

现在我正在尝试用符号代替字符串的使用:

movies = {Avatar: 5, Lord of the rings: 4, Godfather: 4}

显然这行不通。

Ruby 如何处理符号命名中的空格?

【问题讨论】:

    标签: ruby hash symbols


    【解决方案1】:

    自己试试

    "Lord of the rings".to_sym
    #=> :"Lord of the rings"
    

    【讨论】:

    • 但是为什么这不起作用? movies = {Avatar: 3, "Lord of the Rings": 4 } 但确实如此 movies = {Avatar: 3, :"Lord of the Rings" => 4 }
    • @swapnesh:这行不通,因为 JavaScript 样式的表示法仅适用于 some symbolssymbols with spaces don't qualify.
    • 请注意,这个解决方案显然会创建一个字符串实例,然后解析或创建一个匹配的符号实例(除非优化器足够聪明,可以避免这种情况)。使用 :"<name>" 语法声明符号应该简单地解析或创建符号,而无需先创建和丢弃字符串对象。所以——如果使用符号的目的是为了优化......
    【解决方案2】:

    我不确定为什么要在键值中包含空格时要使用符号,但是您可以这样做。你只是不能使用<symbol>: <value> 语法来做到这一点......

    {:Avatar => 5, :"Lord of the rings" => 4, :Godfather => 4}
    

    【讨论】:

    • 我正在尝试这样做,只是 bcoz 符号在内存和执行方面优于字符串,答案为 +1
    【解决方案3】:

    要创建一个带空格的符号,请输入一个冒号,后跟一个带引号的字符串。对于您的示例,您将输入:

    movies = {:Avatar => 5, :'Lord of the rings' => 4, :Godfather => 4}
    

    【讨论】:

      【解决方案4】:

      聚会迟到了,但解决此问题的另一种方法是执行以下操作:

      movies = Hash.new
      
      movies["the little mermaid".to_sym] = 4 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-05
        • 2021-03-30
        • 2021-05-06
        相关资源
        最近更新 更多