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

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]
>>

阅读new(size=0,default=nil)

…In the first form,if no arguments are sent,the new array will be empty. When a size and an optional default are sent,an array is created with size copies of default. Take notice that all elements will reference the same object default.

您使用上面的表单创建了arr3,同时使用文字构造函数[]创建了arr4.

A new array can be created by 07001. Arrays can contain different types of objects.

如果您希望Array :: new表现为文字构造,那么请使用new(size){| index |阻止}形式.

>> arr3 = Array.new(2){ Array.new(2,0) }
=> [[0,0]]
>> arr3.map { |ary| ary.object_id }
=> [73551460,73551450]
>>

(编辑:李大同)

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

    推荐文章
      热点阅读