【发布时间】: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