加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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 = [].

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读