【问题标题】:How do I prevent string keys from being converted to symbols in Rails?如何防止字符串键在 Rails 中转换为符号?
【发布时间】:2021-11-21 19:28:50
【问题描述】:

我正在使用 Rails 4.2。我注意到当我尝试创建一个哈希数组时,似乎我的字符串键正在转换为符号...

> my_hash_arr = [{"name": "DA", "amount": 100000 }]
=> [{:name=>"DA", :amount=>100000}]

我不想要这个。我希望我的键“名称”保留为字符串,而不是转换为符号键。如何构造我的数组,以免发生这种转换。

【问题讨论】:

  • { "name": "DA" }{ name: "DA" } 相同,Ruby 显示为{ :name => "DA" }。仅当键是符号时才使用冒号。它是为了方便而提供的,因为键通常是符号。当键包含空格或以字母或下划线以外的字符开头时,需要使用引号。例如,{ '1name': "DA" } 可以,但 { 1name: "DA" } #=> SyntaxError: <main>: syntax error, unexpected local variable or method。注意可以写{"my name": "DA", :amount=>100000 },但首选{:"my name"=>"DA", :amount=>100000 }
  • 哈希键的 JavaScript 样式冒号不是用于创建哈希的 hashrocket 的替代品,它是创建符号键的替代品,有时会引用符号文字(即 { k: v }{ :k => v }{ 'k': v } 是等价的,{ 'k' => v }{ 'k': v } 是不同的)。
  • 您正在使用 Ruby 的 hash syntax 作为符号键,预计您的键是符号。
  • @stefan 这不仅仅是意料之中的 - Ruby 实际上会将键强制转换为符号。
  • @max 带有符号字面量,Ruby 立即将键部分解释为符号。没有中间字符串。用“这是预期的”我想说的是,在使用符号字面量时,除了符号你别无所求 :-)

标签: ruby-on-rails ruby hash key


【解决方案1】:

如果您愿意,正确的语法是将: 更改为=>,如下所示:

 my_hash_arr = [{"name" => "DA", "amount" => 100000 }]
=> [{"name"=>"DA", "amount"=>100000}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2023-02-09
    • 2016-09-27
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多