==、===、eql?以及equal?的区别

  • ==判断双方的值(value)是否相等
1 == 1.0 # true
  • ===通常情况与==相等,但在一些其它的情况下,也可以判断相等,比如:
    在Range中===用于判断等号右边的对象是否包含于等号左边的Range;
    正则表达式中用于判断一个字符串是否匹配模式,
    Class定义===来判断一个对象是否为类的实例。
(1..10) === 5 # true: 5属于range 1..10
/\d+/ === "123" # true: 字符串匹配这个模式
String === "s" # true: "s" 是一个字符串类的实例
  • eql?判断同时双方的值(value)和类型(type)是否相等
1.eql?(1.0) # false
  • equal?判断对象的identity是否相等,可以认为是否为同一个对象
   s1 = "d"
   s2 = "d"    
   s1.eql? s2 #true
   s1.equal? s2 #false    
   s1.object_id #19839780
   s2.object_id # 19839768
   
   s3 = "d"
   s4 = s3    
   s3.eql? s4 #true
   s3.equal? s4 #true    
   s3.object_id # 19839576
   s4.object_id # 19839576

你可能感兴趣的:(==、===、eql?以及equal?的区别)