尝试使用在红宝石一个字符串值来引用一个散列

问题描述 投票:1回答:3

如何将我指的是哈希使用字符串的值 - 即

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

结果是

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

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

ruby string variables hash string-interpolation
3个回答
4
投票
#!/usr/bin/env ruby
foo = Hash.new
bar = "foo"
instance_eval(bar)["key"]="value"

在此背景下eval(bar)也适用

instance_eval的尝试执行(红宝石代码),你给在当前背景下的第一个参数字符串。

在你的例子,红宝石试图调用字符串#[] =方法。而你不希望:)

希望帮助。


1
投票

您可以按如下EVAL字符串: -

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

1
投票

请记住,EVAL是邪恶的,但它的工作原理:

>> foo = Hash.new
{}
>> bar = "foo"
=> "foo"
>> eval(bar)["key"] = "value"
=> "value"
>> foo
=> {"key"=>"value"}
© www.soinside.com 2019 - 2024. All rights reserved.