在不使用哈希火箭的情况下使用 class 字符串的键定义哈希?

Define a hash with keys of class string without using hash rockets?

可以使用哈希火箭语法定义哈希(具有 class 字符串的键),如下所示:

h = {:name => 'Charles', "name" => 'John'}

有没有办法用另一种表示法来定义它?

我试过:

a = {name: "Charles", "name": "John"}
(irb):14: warning: key :name is duplicated and overwritten on line 14
a
# => {:name=>"John"}

另请注意,在没有任何覆盖的情况下,我仍然无法找到将密钥设置为 class 字符串的方法:

b = {"name": "John"}
b
# => {:name=>"John"} # "name" (String) is stored as :name (Symbol)

据我所知,使用更现代的哈希表示法(不使用哈希火箭的表示法)无法用任何字符串键定义哈希。有什么办法,或者 => 在使用 class 字符串的键定义散列时应该使用火箭吗?

documentation 真的很清楚:

The older syntax for Hash data uses the “hash rocket,” =>:

h = {:foo => 0, :bar => 1, :baz => 2} h # => {:foo=>0, :bar=>1,
> :baz=>2}

Alternatively, but only for a Hash key that's a Symbol, you can use a newer JSON-style syntax...