赞 | 0 |
VIP | 2 |
好人卡 | 27 |
积分 | 1 |
经验 | 26327 |
最后登录 | 2019-10-13 |
在线时间 | 953 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 120
- 在线时间
- 953 小时
- 注册时间
- 2007-4-25
- 帖子
- 805
|
enghao_lim 感觉好像有些明白又有些不明白XD
默认是判断对象的身份(identity)是否相同,把这个概念移植到 C 层面就是判断对象结构体的内存地址的相等性。Ruby 的Object#== 方法底层是这样:
- VALUE
- rb_obj_equal(VALUE obj1, VALUE obj2)
- {
- if (obj1 == obj2) return Qtrue;
- return Qfalse;
- }
复制代码
- rb_define_method(rb_cBasicObject, "==", rb_obj_equal, 1);
复制代码 C 的 `==' 运算符用在指针上时就是比较地址了。
在 Ruby 中,可以做如下的覆盖:
- class Student
- attr :id
- attr :name
- def initialize(id, name)
- @id = id
- @name = name
- end
- def ==(student)
- return @id == student.id && @name == student.name
- end
- end
- student = Student.new(100001, "阿尔西斯")
- p student == Marshal.load(Marshal.dump(student)) # true
复制代码 就可以看见输出是 true 了:handshake |
评分
-
查看全部评分
|