对象的同一性

所有的对象都有标识和值。

标识(ID)用来表示对象同一性。Ruby中所有对象都是唯一的,对象的ID可以通过 (或者 )方法取得。

ary1 = []

ary2 = []

p ary1.object_id #=> 67653636p

 ary2.object_id #=> 67650432

我们用 方法判断两个对象是否同一个对象(ID是否相同)

str1 = "foo"

str2 = str1str3="f"+"o"+"o"

p str1.equal?(str2) #=> truep str1.equal?(str3) #=> false

对象的“值”就是对象拥有的信息。例如,只要对象的字符串内容相等,Ruby就会认为对象的值相等。Ruby使用==来判断对象的值是否相等。

str1 = "foo"str2="f"+"o"+"o"

p str1 == str2 #=> true

除了==以外,Ruby还提供 方法用来判断对象的值是否相等。 与 都是 类定义的方法,大部分情况下它们的执行结果都是一样的。但也有例外,数值类会重定义 方法,因此执行后有不一样结果。

p 1.0 == 1 #=> true

p 1.0.eql?(1) #=> false

凭直觉来讲,把1.0与1判断为相同的值会更加方便。在一般情况进行值的比较时使用==,但是在一些需要进行更严谨的比较的程序中,就需要用到eql?方法。例如,0与0.0作为散列的键时,会判断为不同的键,这是由于散列对象内部的键比较使用了eql?方法来判断。

hash={0=>"0"}

p hash[0.0] #=> nilp hash[0] #=> "0"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容