gpt4 book ai didi

ruby-on-rails - 是否有绕过 'can' t 在迭代期间将新 key 添加到哈希中的解决方案 (RuntimeError)'?

转载 作者:数据小太阳 更新时间:2023-10-29 06:38:56 25 4
gpt4 key购买 nike

我对预期的 RuntimeError 有一个大问题:“无法在迭代期间将新 key 添加到哈希中”

在我的例子中,我有一个 YAML 文件:test.yaml - 我已经在其中添加了一些 key 。

test.yaml
key1:
key2:
key3:

我在变量中获取文件的内容:

file_hash = YAML.load_file("testm.yaml")

然后我需要遍历这个散列并向它们添加其他键:

file_hash.each do |key|
file_hash[key] = 'key_1'
file_hash[key] = 'key_2'
end
File.open('test.yaml', 'w') { |f| YAML.dump(file_hash, f) }

主要问题是我无法在循环中写入散列。当您有权控制循环 block 时,我不明白为什么会这样。有没有其他方法可以完成上面显示的内容?

注意:我使用的是 RUBY 1.9.3 p547

最佳答案

自 1.9 以来,Ruby 使用惰性 迭代,因此他们禁止向您迭代的散列 添加新键。作为一种解决方案,您可以在执行 each 之前轻松复制 hash 或将其转换为 array

irb(main):001:0> a={1=>1}; a.each {|k,v| a[2] = 2}
RuntimeError: can't add a new key into hash during iteration

irb(main):002:0> a={1=>1}; a.clone.each {|k,v| a[2] = 2}; a
=> {1=>1, 2=>2}

irb(main):003:0> a={1=>1}; a.to_a.each {|k,v| a[2] = 2}; a
=> {1=>1, 2=>2}

关于ruby-on-rails - 是否有绕过 'can' t 在迭代期间将新 key 添加到哈希中的解决方案 (RuntimeError)'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25198085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com