尝试使用Ruby中的字符串值引用哈希

时间:2010-05-26 14:22:05

标签: ruby string variables hash string-interpolation

我如何使用字符串的值来引用哈希 - 即

#!/usr/bin/env ruby
foo = Hash.new
bar = "foo"
"#{bar}"["key"] = "value"

结果

 foo:5:in `[]=': string not matched (IndexError)
 from foo:5

如何使用bar(foo)的值来引用名为foo的哈希?谢谢!

3 个答案:

答案 0 :(得分:4)

#!/usr/bin/env ruby
foo = Hash.new
bar = "foo"
instance_eval(bar)["key"]="value"

在此背景下eval(bar)也可以

instance_eval尝试执行(作为ruby代码)您在当前上下文中的第一个参数处给出的字符串。

在您的示例中,Ruby正在尝试调用String#[] =方法。你不希望这样:)

希望有所帮助。

答案 1 :(得分:1)

您可以按如下方式评估字符串: -

foo = Hash.new
bar = "foo"
eval "#{bar}[\"key\"]=\"value\""
puts foo   # {"key"=>"value"}

答案 2 :(得分:1)

请记住, eval是邪恶的,但它有效:

>> foo = Hash.new
{}
>> bar = "foo"
=> "foo"
>> eval(bar)["key"] = "value"
=> "value"
>> foo
=> {"key"=>"value"}