ruby 对象的比较总结
2014-05-29 15:06
281 查看
1、equal? 我们经常要比较两个对象,Ruby中提供了多种比较对象的方法。我们可以通过equal?方法比较两个对象是否相同,通过这种方式是比较两个值是否指向同一个对象的引用。比如:
这种比较方式实际上是比较两个对象的ID是否相同,显然a是一个对象,而b和c指向另一个对象,他们的对象ID是不同的:
2、==来比较对象是否相等
他的作用和equal?方法是不一样,它比较的是两个对象的内容是否相同:
a = "Ruby" # 定义一个字符串对象
除了字符串外,数组和字典类也定义了==操作符,如果两个数组或两个字典对象中元素个数相同,且每个元素都相同,那么==返回true.
Numerics对象在比较的时候会做一个简单的最新转换,所以Fixnum类型的1和Float类型的1.0的比较结果是相等。
同样,你可以使用!=来判断两个对象是否不等。
3、eql?方法
Ruby还提供了eql?方法,它与equal?的功能相同,是一种更精炼的写法。
4、三个等号的比较操作===
通常情况下这中方式与==是一样的,但是在某些特定情况下,===有特殊的含义:
在Range中===用于判断等号右边的对象是否包含于等号左边的Range;
正则表达式中用于判断一个字符串是否匹配模式,
Class定义===来判断一个对象是否为类的实例,
Symbol定义===来判断等号两边的符号对象是否相同。
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
相关文章推荐
- ruby 对象的比较总结
- ruby_对象的比较_等于号_3个等于号_equal_eql
- Ruby对象模型总结
- 比较C#中的委托和Ruby中的block对象
- ruby 比较符号总结
- 黑马程序员-Java中比较实用的对象总结
- 关于ajax对象一些常用属性、事件和方法大小写比较常见的问题总结
- 软件工程总结——传统软件开发方法与面向对象开发方法的比较
- ruby_对象的比较_等于号_3个等于号_equal_eql
- C#对象比较的总结
- Ruby中对象的相等性比较
- Ruby里面的某个对象与hash做属于比较
- 面向对象中比较重要的this,static,super,单利设计的总结和归纳
- Ruby中Time对象的常用函数总结
- C#面向对象名词比较(转ttyp 的文章)
- Ruby和其它类似语言的比较
- XPath中如何比较不同类型的对象
- 类对象的实例化方式总结
- ASP.NET中的FILE对象总结 (藏)
- C#面向对象名词比较(一)