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

时间:2015-08-31 10:59:29

标签: ruby

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

class BatchTestService {

    static transactional = false

    def springBatchService

    ...
    }
}

在Ruby 1.9中,有一种新语法,我可以这样做:

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

但是如何将变量转换为键?我试过了:

my_hash = {arbitrary: 'my_value'}

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

3 个答案:

答案 0 :(得分:3)

Ruby 1.9语法仅适用于Symbol文字。除了其他任何东西,那些键不是Symbol,或者不是文字(就像你的例子中那样),你仍然需要使用hashrocket。

答案 1 :(得分:2)

让我介绍两种方法来做你想要的。如果您不想继续使用1.8语法和hashrockets, ruby​​-doc.org 建议在Ruby 1.9.3中以这种方式执行此操作:

my_hash = Hash.new

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

Livedemo:http://ideone.com/yqIx2M

第二个(与你想要实现的更相似)是:

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

puts my_hash

Livedemo:http://ideone.com/HHLyAi

答案 2 :(得分:2)

{arbitrary: 'my_value'}{:arbitrary => 'my_value'}的语法糖,:arbitrary'arbitrary'.to_sym的语法糖(是的,这是谎言,因为:arbitrary实习生解释器在执行代码时读取代码和'arbitrary'.to_sym实习生,但为了解释起见,我们假装它们是等同的)

因此,{arbitrary: 'my_value'}可以写成{'arbitrary'.to_sym => 'my_value'},因为您拥有变量中的键,所以您可以使用:

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

请记住,当您使用to_sym时,您冒着创建大量符号的风险,这些符号会永久保留在内存中(ish),因此您可能需要考虑使用旧语法的字符串键。有关字符串和符号之间差异的更多信息,请阅读:http://www.randomhacks.net/2007/01/20/13-ways-of-looking-at-a-ruby-symbol/