Ruby 1.9的bug? – Array.permutation
发布时间:2020-12-17 03:19:09 所属栏目:百科 来源:网络整理
导读:在尝试来自Euler Project的问题41时,我遇到了似乎是Array.permutation的 Ruby 1.9实现中的一个错误.这是隔离的问题代码: n = 4slice = '987654321'.chars.to_a[-n..-1]puts "slice = #{slice.join}"slice.permutation(n) {|perm| puts perm.join}slice2 = s
在尝试来自Euler Project的问题41时,我遇到了似乎是Array.permutation的
Ruby 1.9实现中的一个错误.这是隔离的问题代码:
n = 4 slice = '987654321'.chars.to_a[-n..-1] puts "slice = #{slice.join}" slice.permutation(n) {|perm| puts perm.join} slice2 = slice.dup puts "slice2 = #{slice2.join}" slice2.permutation(n) {|perm| puts perm.join} slice3 = [] (0...n).each {|i| slice3[i] = slice[i]} puts "slice3 = #{slice3.join}" slice3.permutation(n) {|perm| puts perm.join} 我对slice和slice2的输出是: slice = 4321 9876 9867 9786 9768 9687 ... 但是,slice3出现正确,数字1到4被置换.此外,n = 4是第一个出现此问题的值.当我设置n = 3时,我得到预期的输出.这是一个错误,还是我错误的编码?快速谷歌搜索没有发现任何东西. 解决方法
这是一个
known bug,固定在1.9.2p136和更新.
除了更新到更新的Ruby之外,最简单的方法是确保您的阵列不是“共享”,无论是通过构建一个新的(如slice3),还是简单地“修改”它,例如slice = []. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |