1. equal? ruby中比较两对象方法有很多,可以用equal?比较两对象是否相等。
test1 = "abce" # test1.object_id => 22615872
test2 = "abce" # test2.object_id => 2261988
test1.equal?(test2) => false
test = test3 = "abce" # test.object_id => 22955376 ; test3.object_id => 22955376
test.equal?(test3) => true
test.object_id == test3.object_id #等同于 test.equal?(test3)
equal?是对象的比较,不是值的比较。
2. == 和equal? 是不一样的,它是比较对象内容是否相等。
test1 = "abce" # test1.object_id => 22615872
test2 = "abce" # test2.object_id => 2261988
test1.equal?(test2) => false
test1 == test2 => true
3. eql? 也是内容比较,但比 == 更精确(包括类型比较)
test1 = "123"
test2 = "123"
test1.eql?(test2) => true
1.eql?(1.0) => false
4. ===
常情况下这中方式与==是一样的,但是在某些特定情况下,===有特殊的含义:
在Range中===用于判断等号右边的对象是否包含于等号左边的Range;
正则表达式中用于判断一个字符串是否匹配模式,
Class定义===来判断一个对象是否为类的实例,
Symbol定义===来判断等号两边的符号对象是否相同。
(1..10) === 5 # true: 5属于range 1..10
/\d+/ === "123" # true: 字符串匹配这个模式 String === "s" # true: "s" 是一个字符串类的实例 :s === "s" # false