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

发布于 2024-09-03 09:19:30 字数 266 浏览 2 评论 0原文

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

#!/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 的哈希?谢谢!

How would I refer to a hash using the value of a string - i.e.

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

results in

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

How do I use the value of bar (foo) to reference the hash named foo? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

平安喜乐 2024-09-10 09:19:30
#!/usr/bin/env ruby
foo = Hash.new
bar = "foo"
instance_eval(bar)["key"]="value"

在此上下文中,eval(bar) 也可以工作,

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

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

希望有帮助。

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

At this context eval(bar) also works

instance_eval tries to execute(as ruby code) the string that you give at first argument in the current context.

In your example, Ruby is trying to invoke the String#[]= method. And you don't want that :)

Hope that helps.

最冷一天 2024-09-10 09:19:30

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

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

You can eval the string as follows :-

foo = Hash.new
bar = "foo"
eval "#{bar}[\"key\"]=\"value\""
puts foo   # {"key"=>"value"}
冷了相思 2024-09-10 09:19:30

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

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

Remember, eval is evil, but it works:

>> foo = Hash.new
{}
>> bar = "foo"
=> "foo"
>> eval(bar)["key"] = "value"
=> "value"
>> foo
=> {"key"=>"value"}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文