如何在Ruby 1.9中使用变量设置哈希键?

如何在Ruby 1.9中使用变量设置哈希键?,ruby,Ruby,我有一个字符串变量。我想使用变量作为键创建一个散列。在Ruby 1.8中,我使用了hashrocket语法,如下所示: my_key = 'arbitrary' my_hash = {my_key => 'my_value'} 在Ruby 1.9中,有一种新的语法,我可以做到: my_hash = {arbitrary: 'my_value'} 但是如何将变量转换为键呢?我试过: my_key = 'arbitrary' my_hash = {:my_key 'my_value'}

我有一个字符串变量。我想使用变量作为键创建一个散列。在Ruby 1.8中,我使用了hashrocket语法,如下所示:

my_key = 'arbitrary'
my_hash = {my_key => 'my_value'}
在Ruby 1.9中,有一种新的语法,我可以做到:

my_hash = {arbitrary: 'my_value'}
但是如何将变量转换为键呢?我试过:

my_key = 'arbitrary'
my_hash = {:my_key 'my_value'} 
my_hash = {my_key.to_sym: 'my_value'}
my_hash = {:my_key.to_sym 'my_value'} 
my_hash = {my_key.to_sym 'my_value'}

我必须继续使用Ruby 1.8语法吗?

Ruby 1.9语法仅适用于
Symbol
文本。对于其他任何东西,即键不是
Symbol
,或者不是文字(如您的示例中所示),您仍然需要使用hashrocket。

让我介绍两种方法来实现您真正想要的功能。如果您不想再继续使用1.8语法和hashrockets,ruby doc.org建议在ruby 1.9.3中采用这种方式:

my_hash = Hash.new

my_key = "key000"
my_hash[my_key] = "my_value"
现场演示:

第二个(更类似于您试图实现的目标)是:


Livedemo:

{Arbitral:'my_value'}
{:Arbitral=>'my_value'}
的语法糖,而
:Arbitral
'Arbitral'的语法糖(是的,这是一个谎言,因为解释器读取代码时是任意的,而执行代码时是任意的。为了解释起见,我们假设它们是等价的)

因此,
{arbitral:'my_value'}
可以写为
{'arbitral'

my_key = 'arbitrary'
my_hash = {my_key.to_sym => 'my_value'}

请记住,当您使用
表示符号时,您可能会创建大量符号,这些符号将永远留在内存中(ish)关于字符串和符号之间的差异的更多信息,请参阅:

你不需要对你现有的代码进行任何修改。哈什火箭仍然可以工作。你也可以和<代码> MyuHASH[MyKiKe]=‘MyoValuy’< /C> >。Ruby确实从2.2开始收集符号。
my_key = 'arbitrary'
my_hash = {my_key.to_sym => 'my_value'}