本帖最后由 RyanBern 于 2016-7-17 22:06 编辑
其实喵呜在写这一段的时候不应该引入'=='这个符号的,因为这个给初学者造成了非常大的困扰。真正判断是否相等的方法应该是Object#equal?,这个方法才属于真正的所谓“判断地址”。这是因为'=='在某些内置类里面已经被覆盖,因此执行'=='判断的时候只是判断内容相等与否。
arr_a = [0, 1] arr_b = arr_a.dup p (arr_a == arr_b) #=> true str_a = "Hello World" str_b = str_a.dup p (str_a == str_b) #=> true
arr_a = [0, 1]
arr_b = arr_a.dup
p (arr_a == arr_b) #=> true
str_a = "Hello World"
str_b = str_a.dup
p (str_a == str_b) #=> true
喵呜举例的时候,特地用了自己定义的类A,在默认情况下,'=='的含义等同于'equal?',因此这样才不会出问题。因此我建议,不论是你还是楼主喵呜,都应该先引入'equal?'来解释这个问题为好。
嗯,不去类比或者类推是最好的,因为如果这样理解Ruby会经常出错。
另外%d表示32位整数,但是指针的话有两种,有32位指针和64位指针的区别(视系统而定),因此使用%d打印是不合理的,而%p才是专门用来打印指针的格式转换符。 |