加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby三重等于

发布时间:2020-12-16 19:30:48 所属栏目:百科 来源:网络整理
导读:假设我有以下代码. result = if a.is_a?(Class) a = Exception a.nameelsif ...elsif ...end 我重写了这段代码 case awhen Exception a.namewhen ...when ...end 我明白三位一体吗? 解决方法 我们无法判断你是否真的得到这样一个有限例子的===.但是,当您使
假设我有以下代码.
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语句中确定正确的方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读