Ruby语言==与===的区别

==被称为相等性操作符,通常用来比较两个对象的类型和内容是否匹配(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

(1)
上一篇 2020年7月26日 21:00
下一篇 2020年7月27日 23:00

相关推荐

  • Rails中<%…% >与<%=…%>的区别

    这两种嵌入式Ruby的区别在于<%…% >执行里面的代码,而<%=…%>执行它并插入结果 到模板。

    Ruby经验 2021年4月27日
    05340
  • Ruby语言的单键(Singleton)方法的介绍

    Ruby中的核心类库和标准类库中的类和模块对于开发者是“开放的“,这是Ruby的关键特性之一,可以在运行时修改和扩展,可以用单键(Singleton)方法定义类方法或者专门为某个对象添加方法。之所以被称为单键方法,因为它只在单个对象上可用。 Math模块是Ruby核心类库的一部分,上述代码给Math模块添加了一个新方法…

    Ruby经验 2020年7月28日
    03560
  • Ruby语言class方法与superclass方法的介绍

    class方法 当想知道某个对象是哪个类的实例时,我们可以使用class方法。 superclass方法 当想知道某个子类(subclass)继承哪个父类(superclass),我们可以使用superclass方法。 当被给予的类没有父类时,将返回nil值。 注:父类(superclass)又称为超类,但笔者认为父类…

    Ruby经验 2020年7月28日
    01.0K0

发表评论

登录后才能评论