我正在使用 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/