设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1977|回复: 5
打印 上一主题 下一主题

[已经解决] Ruby的object_id相同意味着什么?

[复制链接]

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21437
在线时间
9386 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

跳转到指定楼层
1
发表于 2014-7-12 00:32:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
在帮助文档中看到了这样的代码:
  1. ary = Array.new(3, "foo")
  2. ary.each {|obj| p obj.object_id }
  3. # => 537774036
  4.      537774036
  5.      537774036

  6. ary = Array.new(3) { "foo" }
  7. ary.each {|obj| p obj.object_id }
  8. # => 537770448
  9.      537770436
  10.      537770424
复制代码
前一种方法中生成的数组的所有元素object_id都是相同的,所以想问一下相同的object_id究竟意味着什么?修改对应元素的值以后拥有相同object_id的其他元素会跟着改变吗?
菜鸟飞呀飞 该用户已被删除
2
发表于 2014-7-12 03:08:21 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

3
发表于 2014-7-12 06:32:54 | 只看该作者
本帖最后由 taroxd 于 2014-7-12 06:37 编辑



表明他们指向的是同一个对象

对于不可能改变(比如true,false,nil,Fixnum,Symbol等)或者你不会去改变的东西,用第一种做法没有任何问题。
但是如果你要改变一个对象的内部状态,如上图中的 arr[0][0] = 'o' ,或者由数组构成的数组的话,那么结果也会和上图一样。

评分

参与人数 1梦石 +2 收起 理由
VIPArcher + 2 生动+1,形象+1。

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
117
在线时间
552 小时
注册时间
2012-8-18
帖子
1429
4
发表于 2014-7-12 08:15:22 | 只看该作者
object_id对于那些true/falde/nil/Numeric/Symbol来说更像是值,而对于其他对象来说更像一个地址
你用Array.new产生的,相当于三个指向同一字符串对象的指针,那么你修改其中任何一个,都会导致最终对象的改变,从表现来看就是三个对象都改变了

评分

参与人数 1星屑 +150 收起 理由
VIPArcher + 150 我很赞同

查看全部评分

我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21437
在线时间
9386 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

5
 楼主| 发表于 2014-7-12 11:15:04 | 只看该作者
@无脑之人 @taroxd @菜鸟飞呀飞

谢谢,就是说object_id类似于指针?
那么object_id能不能实现指针的相关功能呢?比如获取某个object_id对应的对象并对其操作……

另外除了这种数组的创建方式外还有其他方式也会导致对象的object_id完全相同吗?

点评

解引用有,是meta-programming的,我不太清楚; 传参啥的object_id都不变啊  发表于 2014-7-12 12:10
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

6
发表于 2014-7-12 14:51:49 | 只看该作者
本帖最后由 taroxd 于 2014-7-12 15:38 编辑
喵呜喵5 发表于 2014-7-12 11:15
@无脑之人 @taroxd @菜鸟飞呀飞

谢谢,就是说object_id类似于指针?


1. 赋值肯定导致 object_id 相同。赋值其实就是传一个指针啦。还有就是立即值的 object_id 相同呗。
另外,Hash的固定默认值(非default_proc)会导致 object_id 相同。至于别的么……查Ruby文档呗。
2. 解引用:ObjectSpace._id2ref(object_id)

点评

知道了,谢谢  发表于 2014-7-12 20:03
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-2-23 07:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表