ruby三重等于

前端之家收集整理的这篇文章主要介绍了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语句中确定正确的方式.

原文链接:https://www.f2er.com/ruby/271216.html

猜你在找的Ruby相关文章