美文网首页
Ruby 对象的同一性

Ruby 对象的同一性

作者: changsanjiang | 来源:发表于2017-10-19 16:06 被阅读1次

所有的对象都有标识.

标识

标识(ID)用来标识对象的同一性.Ruby中所有对象都是唯一的, 对象的 ID 可以通过 object_id(或者__id__)方法获得.

arr1 = Array.new
arr2 = Array.new

p arr1.object_id
p arr2.__id__

输出结果:

70137139030940
70137139030920

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

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

p str1.equal?(str2)
p str2.equal?(str3)

输出结果:

true
false

Ruby使用 == 来判断对象的值是否相等.

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

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

p str1 == str2

输出结果:

ture

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

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

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

hash = { 0 => "212"}
p hash[0.0]  #=> nil
p hash[0]     #=> "212"

相关文章

  • Ruby 对象的同一性

    所有的对象都有标识和值. 标识 标识(ID)用来标识对象的同一性.Ruby中所有对象都是唯一的, 对象的 ID 可...

  • 对象的同一性

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

  • Ruby的对象与类

    Ruby的对象与类 ruby是一门完全面向对象的语言,它当中的每一个值都是对象,那么Ruby对象的本质到底是什么呢...

  • ruby 对象

    1. 注意:对象的实例变量只能被该对象的实例方法访问,实例方法外的代码不能对实例变量进行读写(除非反射机制) 错误...

  • 为什么说Ruby是纯面向对象的语言

    Ruby 是纯面向对象的语言,Ruby 中的一切都是以对象的形式出现。Ruby 中的每个值都是一个对象,即使是最原...

  • 《Ruby基础教程》提取-第二部分

    第2部分 Ruby的基础: 什么是对象:在RUBY中, 靓丽数据的基本单位称为对象。数值对象字符串对象数组对象,散...

  • ruby中方法的调用——方法执行

    Ruby的每一行代码都会在一个对象中被执行,这个对象就是所谓的当前对象。 当Ruby调用某个对象的方法,这个对象就...

  • Ruby介绍与环境

    下面要开始学习Ruby啦!!! Ruby是一种纯粹的面向对象编程语言。 Ruby的特性: Ruby 是开源的,在 ...

  • Ruby、RVM 、Rubygems、Cocoapods之间的关

    (一) Ruby (脚本语言) 种简单快捷的面向对象(面向对象程序设计)脚本语言 (二) RVM (Ruby ...

  • 认识 Ruby 与 Gem

    什么是 Ruby Ruby[http://www.ruby-lang.org/zh_cn/] 是一种面向对象、指令...

网友评论

      本文标题:Ruby 对象的同一性

      本文链接:https://www.haomeiwen.com/subject/ihauuxtx.html