这是Ruby中一组数组的预期行为吗?
发布时间:2020-12-17 02:13:24 所属栏目:百科 来源:网络整理
导读:我们在 Ruby 1.8.7中做了一些工作,需要遍历和分区无向图,这在生产中一直很奇怪.当我将失败的代码提炼到最基本的组件时,我得到了这个奇怪的失败测试: it 'should be able to clear a ruby set of arrays' do a = ["2","b","d"] b = ["1","a","c","e","f"] se
我们在
Ruby 1.8.7中做了一些工作,需要遍历和分区无向图,这在生产中一直很奇怪.当我将失败的代码提炼到最基本的组件时,我得到了这个奇怪的失败测试:
it 'should be able to clear a ruby set of arrays' do a = ["2","b","d"] b = ["1","a","c","e","f"] set = Set.new([a,b]) a.concat(b) p "before clear: #{set.inspect}" set.clear p "after clear: #{set.inspect}" set.size.should == 0 end 此输出的测试失败: "before clear: #<Set: {["1","a","c","e","f"],["2","b","d","1","f"]}>" "after clear: #<Set: {["2","f"]}>" expected: 0 got: 1 (using ==) 尝试从集合中删除也会以奇怪的方式表现.我猜测Ruby会在concat()下更改数组中键的哈希值,但我当然应该能够清除Set.对? 解决方法
有一种解决方法,如果您在修改密钥后复制了该集,则新集将具有更新的密钥并正确清除.所以设置set = set.dup将解决这个问题.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |