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

7

我有一个变量是字符串。我想使用该变量作为键创建哈希表。在 Ruby 1.8 中,我使用了哈希箭头语法,像这样:

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 语法?


1
您无需对现有代码进行任何修改。 Hashrocket 仍然有效。 - Aleksei Matiushkin
据我所知,您也可以使用my_hash[my_key] = 'my_value' - Luan Nico
3个回答

7

我来介绍两种实现你想要的功能的方法。如果你不再想使用1.8语法和hashrocket,ruby-doc.org推荐在Ruby 1.9.3中使用以下方式:

my_hash = Hash.new

my_key = "key000"
my_hash[my_key] = "my_value"

现场演示:http://ideone.com/yqIx2M

第二个(更接近您想要实现的)是:

my_key = "key0"
my_hash = Hash[my_key, "value00"]

puts my_hash

实时演示:http://ideone.com/HHLyAi


4
{variable.to_sym => 'my_value'}{:variable => 'my_value'}的简写形式,并且:variable'variable'.to_sym的简写形式(虽然这是一个谎言,因为当解释器读取代码时:variable会被缓存,而在执行代码时'variable'.to_sym会被缓存,但出于说明的目的,我们假装它们相等)。
因此,{variable: 'my_value'}可以写成{'variable'.to_sym => 'my_value'},并且由于键名存在变量中,您可以使用:{variable.to_sym => 'my_value'}
my_key = 'arbitrary'
my_hash = {my_key.to_sym => 'my_value'}

请记住,当您使用to_sym时,您可能会创建大量的符号,并且这些符号将永久(或者说几乎永久)驻留在内存中,因此您可能希望考虑在旧语法中使用字符串键。有关字符串和符号之间差异的更多信息,请阅读此文:http://www.randomhacks.net/2007/01/20/13-ways-of-looking-at-a-ruby-symbol/

2
Ruby从2.2版本开始可以收集符号。 - Borsunho

3
Ruby 1.9语法仅适用于Symbol字面量。对于其他任何键(非Symbol)或不是字面常量的情况(如您的示例),仍需使用哈希箭头。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接