• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >ruby > Ruby中相等性判断的4种方法

Ruby中相等性判断的4种方法

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了列文方差相等性检验,相等性,mood方差相等性检验表,证明线段相等的方法,证明角相等的方法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

很早就知道 ruby 有 4 种相等性判断方法,分别是:“==”,“===”,“equal?” 和 “eql?”,平常程序中都有使用,但是感觉对其缺乏深入理解,今天读 rails 部分源码的时候拿捏不定其中一个判断的意思,于是趁机深入研究了一番,总算觉得比较清楚了,今天做一下笔记,以作备忘。

“==” 最常见的相等性判断

“==” 使用最频繁,它通常用于对象的值相等性(语义相等)判断,在 Object 的方法定义中,“==” 比较两个对象的 object_id 是否一致,通常子类都会重写覆盖这个方法,通过比较内部值来判断对象是否相等。

比如 ActiveRecord::Base 对 “==” 的定义

  def ==(comparison_object)
    super ||
      comparison_object.instance_of?(self.class) &&
      id.present? &&
      comparison_object.id == id
  end
</div>

通过 model 的 id 属性比较两个 ActiveRecord::Base 实例是否相等。

“===” 用于 case 语句的相容判断

“===” 主要用于 case 语句中对象的相容比较,看代码比较容易理解。
def what_is(obj)
  case obj
    when /abc/
      puts "include abc"
    when 3..5
      puts "in 3..5"
    when Symbol
      puts "It is a symbol"
    else
      puts "unkonwn"
  end
end

what_is("abcde") # =>  "include abc"
what_is(4)       # =>  "in 3..5"
what_is(:a)      # =>  "It is a symbol"
what_is(100)     # =>  "unknown"
</div>

case 背后是拿每一个 when 后面的对象与 obj 进行 === 方法计算比较,比如上面的代码就是 分别求 /abc/.===(obj) , (3..5).===(obj) , Symbol.===(obj) 。

关键得看 === 方法里如何定义, Class 类中, === 定义为 obj.is_a?(klass),所以 case 可以现实 obj 的类型判断。

特别要注意的是和其他相等判断不同 “===” 通常没法交换,也就是很可能 a.===(b) != b.===(a) ,比如 /abc/ === "abcd" 为 true,但 "abcd" === /abc/ 为 false。

“equal?” 相同对象判断

“equal?” 其实是最简单的,但是也是最容易让人搞混的判断。说它简单是因为这个方法的语义是比较两个对象是否相同(是否有相同的 object_id),Object 的方法适用所有对象,不应该对其重写覆盖。说它容易让人搞混,是因为 ruby 和 java 中 “==” 和 “equal?” 方法的语义正好是相反的,ruby 中 “equal?” 表示对象引用相同,而 java 表示对象值相同。

“eql?” 对象 hash 值判断

eql? 用于对象 hash 值判断,如果两个对象的 hash 值相等,就返回 true,否则返回 false。Object 的定义里,“eql?” 和 “==” 是等价的。通常可以把 “eql?” 看作比 “==” 更严格的相等,比如:
1 == 1.0     #=> true
1.eql? 1.0   #=> false
</div>

</div>

您可能想查找下面的文章:

  • Ruby中相等性判断的4种方法

相关文章

  • 使用Ruby on Rails和PostgreSQL自动生成UUID的教程
  • Ruby中的Proc类及Proc的类方法Proc.new的使用解析
  • Ruby简洁学习笔记(一):字符串、数字、类和对象
  • 使用Ruby编写脚本进行系统管理的教程
  • rudy 重载方法 详解
  • Ruby中使用each和collect进行迭代的用法
  • 一个简单的Ruby可逆加密解密类
  • 使用Ruby实现FTP密码破解
  • Ruby中钩子方法的运用实例解析
  • 浅谈Ruby on Rails下的rake与数据库数据迁移操作

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Ruby、PHP、Shell实现求50以内的素数
    • Ruby和元编程之万物皆为对象
    • Terry七月Ruby读书笔记(比较详细)第1/4页
    • 关于Ruby on Rails视图编写的一些建议
    • 浅析Ruby中的类对象的概念
    • 深入剖析Ruby设计模式编程中对命令模式的相关使用
    • Ruby多线程编程初步入门
    • Ruby实现生产者和消费者代码分享
    • 在阿里云 (aliyun) 服务器上搭建Ruby On Rails环境
    • 详解Ruby中的方法概念

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有