• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ruby 对象的比较总结

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1、equal?

    我们经常要比较两个对象,Ruby中提供了多种比较对象的方法。我们可以通过equal?方法比较两个对象是否相同,通过这种方式是比较两个值是否指向同一个对象的引用。比如:

a = "Ruby"       # 一个字符串对象。
    b = c = "Ruby"   # 两个字符串对象指向动一个引用。
    a.equal?(b)      # false: a和b是不同的对象。
    b.equal?(c)      # true: b和c指向同一个引用。

    这种比较方式实际上是比较两个对象的ID是否相同,显然a是一个对象,而b和c指向另一个对象,他们的对象ID是不同的:

a.object_id == b.object_id   # 等同于 a.equal?(b)

2、==来比较对象是否相等

    他的作用和equal?方法是不一样,它比较的是两个对象的内容是否相同:

     a = "Ruby" # 定义一个字符串对象

b = "Ruby"    # 虽然和a的内容相同,但是他们是不同的对象
    a.equal?(b)   # false: a和b指向不同的对象
    a == b        # true: 他们的内容是相同的

     除了字符串外,数组和字典类也定义了==操作符,如果两个数组或两个字典对象中元素个数相同,且每个元素都相同,那么==返回true.

     Numerics对象在比较的时候会做一个简单的最新转换,所以Fixnum类型的1和Float类型的1.0的比较结果是相等。

     同样,你可以使用!=来判断两个对象是否不等。

 

3、eql?方法

Ruby还提供了eql?方法,它与equal?的功能相同,是一种更精炼的写法。

 

4、三个等号的比较操作===

通常情况下这中方式与==是一样的,但是在某些特定情况下,===有特殊的含义:

在Range中===用于判断等号右边的对象是否包含于等号左边的Range;

正则表达式中用于判断一个字符串是否匹配模式,

Class定义===来判断一个对象是否为类的实例,

Symbol定义===来判断等号两边的符号对象是否相同。

(1..10) === 5 # true: 5属于range 1..10
/\d+/ === "123"  # true: 字符串匹配这个模式
   String === "s"   # true: "s" 是一个字符串类的实例
   :s === "s"       # true 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
对ruby时间处理的资料小结发布时间:2022-07-14
下一篇:
ImLazy(ruby)发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap