Ruby 通过引用更改哈希值

标签 ruby reference

我正在使用 eval 来处理哈希。这部分的工作原理:

some_hash = {"a" => {"b" => "c"}}
target_hash = "some_hash"
target_key = "['a']"

my_value = eval(target_hash + target_key)
puts "my_value " + my_value.to_s

并打印:

my_value {"b"=>"c"}

我如何使用 eval 更改值,以便哈希结果如下:

some_hash = {"a" => {"d" => "e"}}

谢谢

编辑:

我认为我的解释不正确。我必须深入研究哈希,但我希望能够灵活地使用在运行时设置的字符串来完成此操作。该字符串可能是 "['key_level_1']['key_level_2']['key_level_3']" ,它应该引用 some_hash['key_level_1']['key_level_2'][' key_level_3']

再说一次,我需要将该值设置为某个值。这有道理吗?

最佳答案

我会采用一个数组,例如['key1', 'key2', 'key3'] (可以从适当格式的字符串构造)和“根对象”,并使用它来定位特定的“目标对象”分支(我会推荐递归)。然后操纵找到的适当对象。在这种情况下,some_hash 应该是开始遍历的“根对象”,而不是字符串。

这是我写的非常旧的答案的链接(当我仍然积极使用 ruby​​ 时)。它不处理分配位,但我相信它显示了免评估的有效方法的开始:How do you access nested elements of a hash with a single string key?找到“目标对象”后,只需为特定键分配新值即可。 (链接帖子中接受的答案也是一个 gem ,如果不是更神秘和符号泄漏的话。)

祝你编码愉快。

关于Ruby 通过引用更改哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541998/

相关文章:

python - python的引用手册?

Java接口(interface)作为引用类型?

C++ 指针和引用

ruby-on-rails - rails AWS S3 删除文件

ruby - 使用 Nokogiri 获取具有给定名称的单个子元素

ruby-on-rails - ActionView::Template::Error: 785: '' 处的意外 token

ruby-on-rails - Rails 4 - 不要在变量中包含自己

c++ - 错误 : invalid initialization of non-const reference of type 'Vector2D&' from an rvalue of type 'Vector2D'

html - 向行添加新的 div 会导致换行

multithreading - 如何将对堆栈变量的引用传递给线程?