Ruby中相等性判断的4种方法
很早就知道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
通过model的id属性比较两个ActiveRecord::Base实例是否相等。
“===”用于case语句的相容判断
“===”主要用于case语句中对象的相容比较,看代码比较容易理解。
defwhat_is(obj)
caseobj
when/abc/
puts"includeabc"
when3..5
puts"in3..5"
whenSymbol
puts"Itisasymbol"
else
puts"unkonwn"
end
end
what_is("abcde")#=> "includeabc" what_is(4) #=> "in3..5" what_is(:a) #=> "Itisasymbol" what_is(100) #=> "unknown"
热门推荐
10 对患者生日祝福语简短
11 结婚祝福语简短装备
12 周岁祝福语学生文案简短
13 订婚领证祝福语简短精辟
14 导师获奖祝福语大全简短
15 新婚购房祝福语简短精辟
16 牛年祝福语简短的爱人
17 送芒果的祝福语简短
18 送给学长毕业祝福语简短