ruby中的数组数组,通过引用传递
发布时间:2020-12-17 01:45:53 所属栏目:百科 来源:网络整理
导读:我正在尝试在 Ruby中创建一个填充零的5×5矩阵.我使用的代码是: ruby-1.9.2-p290 :014 a = Array.new(5,Array.new(5,0)) = [[0,0],[0,0]] 但是,新创建的数组不是单独的对象,而是对其中一个的引用.因此,当我尝试执行以下操作时:a [2] [2] = 1我得到: = [[0
我正在尝试在
Ruby中创建一个填充零的5×5矩阵.我使用的代码是:
ruby-1.9.2-p290 :014 > a = Array.new(5,Array.new(5,0)) => [[0,0],[0,0]] 但是,新创建的数组不是单独的对象,而是对其中一个的引用.因此,当我尝试执行以下操作时:a [2] [2] = 1我得到: => [[0,1,0]] 这显然不是我想要的.检查对象ID确认它: ruby-1.9.2-p290 :020 > a.collect {|z| z.__id__}.uniq => [70253724580020] 我的问题是:它是一个bug还是一个功能? :)我应该如何正确创建数组? 解决方法
正如其他人所指出的那样,这就是数组应该如何工作的方式.相反,您应该使用块初始化程序: a = Array.new(5) { Array.new(5,0) } 但是,如果您正在制作矩阵,请考虑在标准库中使用Matrix类: require 'matrix' # => true m = Matrix.build(5,5) { 0 } # => Matrix[[0,# [0,0]] m.determinant # => 0 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |