ruby – 为什么在二维数组中赋值时会有不同的结果?
发布时间:2020-12-17 02:23:37 所属栏目:百科 来源:网络整理
导读:这两项任务有什么区别?为什么他们有不同的结果? arr3 = Array.new(2,Array.new(2,0))arr4 = [[0,0],[0,0]]arr3 == arr4 # = truearr3 === arr4 # = truearr3[0][0] = "/"arr4[0][0] = "/"arr3 # = [["/",["/",0]]arr4 # = [["/",0]] 解决方法 因为arr3包含
这两项任务有什么区别?为什么他们有不同的结果?
arr3 = Array.new(2,Array.new(2,0)) arr4 = [[0,0],[0,0]] arr3 == arr4 # => true arr3 === arr4 # => true arr3[0][0] = "/" arr4[0][0] = "/" arr3 # => [["/",["/",0]] arr4 # => [["/",0]] 解决方法
因为arr3包含两个相同的对象,但是arr4包含两个不同的对象.
>> arr3 = Array.new(2,0)) => [[0,0]] >> arr3.map { |ary| ary.object_id } => [73703490,73703490] >> arr4 = [[0,0]] => [[0,0]] >> arr4.map { |ary| ary.object_id } => [73670930,73670920] >> 阅读
您使用上面的表单创建了arr3,同时使用文字构造函数[]创建了arr4.
如果您希望Array :: new表现为文字构造,那么请使用new(size){| index |阻止}形式. >> arr3 = Array.new(2){ Array.new(2,0) } => [[0,0]] >> arr3.map { |ary| ary.object_id } => [73551460,73551450] >> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |