本帖最后由 KB.Driver 于 2019-5-3 20:29 编辑 你可以简单的记住,对绝大多数对象而言,你用=号赋值得到的是同一个引用。 但是对数字,这一点不适用。 一般对象 数字 |
值类型 和引用类型 |
本帖最后由 guoxiaomi 于 2019-5-3 19:36 编辑 赋值语句左边只能是一个变量名,否则就是调用方法。
此外,Fixnum和Symbol是“立即值”。 |
因为小于等于31比特的整数 以及 true false nil 都属于立即数 也就是不涉及内存的 其余都开辟内存来储存 a=3 b=a a和b都是3 没有新开辟内存来存3 也就不存在指向的相同问题 a="123" b=a 这时候的 b等于a 是b指向了a指向的内存对象 也就是这个字符串 比方 a=nil 其实是a指向4 这4表示nil 不指向内存块 而a="123" 就是a指向0xXXXXX啥的 a=4 是 a指向9 也即是 0b1001 总之 b=a是b指向了a指向的东西 假如a指向内存 改b就相当于改a(改了指向内存块的内容) 不然改b就是改b(改了指向本身) |
原来如此..所以数组有这些方法.. dup 生成一个与被调内容一样的新数组并返回它。clone 会拷贝 freeze、特殊方法等信息,而 dup 则只拷贝内容。然而,无论哪个方法都不会拷贝数组单元本身。 |
本帖最后由 喵呜喵5 于 2019-5-3 18:43 编辑 数组数据和名称是两个独立的东西
实际上干了两件事,一个是创造了一个数组,一个是将a的值设置为该数组的访问路径(正式的说法叫引用)
实际上干的事情是将b的值也设置为该数组的访问路径 因为访问路径和数组本身是独立的两个东西,所以只要访问路径相同,不管是在a里面还是在b里面,都能修改到访问路径目标的数组 所以
按照这个思路看你的问题:
你理解中错误的地方是: 你觉的 a = 3 b = a 是将 3 保存到 a 中,将 b 设置为 a 的别名 实际上真正的概念是: a = 3 b = a 是创造了一个 3 的数据,a 是 3 这个数据的别名,b也是 3 这个数据的别名 |
b = a 只是代入a当时的值..所以其实等同 b = 2 a后来改变也不关b的事了.. |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2024-11-13 12:01
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.