==被称为相等性操作符,通常用来比较两个对象的类型和内容是否匹配(matching),先类型比较,然后内容比较,最终返回true或false。
===被称为条件相等性操作符,通常用于case语句when条件(Regexp、Range、Proc)的匹配(matching),先类型比较,然后与每个可能的条件分支进行内容比较,最终返回true或false。
Class类将===定义为测试其右侧的操作数是否为左侧操作数所命名的类的一个实例。
Range类将===定义为测试其右侧的操作数是否为左侧操作数的范围之内。
Regexp类将===定义为测试其右侧的操作数是否匹配左侧操作数所指定的模式。
Symbol类将===定义为测试符号或字符串的相等性。
==与===在某些类是一样的,相当于别名,比如String,Integer等。
String示例
#下面的==均可被替换为===,作用一样
s = 'foo'
s == 'foo' # => true
s == 'food' # => false
s == 'FOO' # => false
但在某些特定的类,是有区别的,===被重新定义了,比如Range、RegExp、Proc等。
Range示例
(0..2) == (0..2) #=> true
(0..2) == Range.new(0,2) #=> true
(0..2) == (0...2) #=> false
case
when (1..50) === 79 then puts "low"
when (51..75) === 79 then puts "medium"
when (76..100) === 79 then puts "high"
end
# Prints "high"
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/rubye/4373.html