ruby三重等于

假设我有以下代码.
result = if a.is_a?(Class) && a <= Exception
   a.name
elsif ...
elsif ...
end

我重写了这段代码

case a
when Exception
     a.name
when ...
when ...
end

我明白三位一体吗?

解决方法

我们无法判断你是否真的得到这样一个有限例子的===.但是,当您使用===显式或隐式地作为case / when语句(例如示例中使用的)语句的一部分时,这是一个细分.

元组(===)有许多不同的实现,这取决于左边的类.这只是一个中介符号的===方法.意思是以下语句是相同的:

a.=== b
a === b

差异看起来不是很多,但是这意味着左侧的===方法调用,而不是在语言层面上定义的一些魔术运算符,就像==但不完全相同.相反,===在每个使用它的类中定义,也许在一个继承的类或Mixin中.

元组的一般定义等于它将返回true,如果两个部分是相同的,或者右部分包含在左边的范围内.

在Class ===的情况下,如果参数是类(或子类)的实例,操作将返回true.在左侧是正则表达式的情况下,当右侧与正则表达式匹配时,返回true.

case的时候是一个隐含的===,它使用===比较case变量到when子句,以便以下两个语句产生相同的结果.

case a
when String
  puts "This is a String"
when (1..3)
  puts "A number between 1 and 3"
else
  puts "UnkNown"
end

if String === a 
  puts "This is a String"
elsif (1..3) === a
  puts "A number between 1 and 3"
else
  puts "UnkNown"
end

检查您在===左边使用的类型的文档,或者在when语句中确定正确的方式.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...