假设我有以下代码.
result = if a.is_a?(Class) && a <= Exception
a.name
elsif ...
elsif ...
end
Run Code Online (Sandbox Code Playgroud)
我重构了这个代码
case a
when Exception
a.name
when ...
when ...
end
Run Code Online (Sandbox Code Playgroud)
我是否正确理解三重相等?
EmF*_*mFi 57
我们无法从这样一个有限的例子中判断你是否真的得到了===.但是,当你使用===时,可以明确地或隐含地作为case/when语句的一部分(例如示例中使用的语句)来分解实际发生的情况.
三重等号(===)有许多不同的实现,它们依赖于左侧部分的类.它实际上只是.===方法的中缀表示法.意味着以下陈述是相同的:
a.=== b
a === b
Run Code Online (Sandbox Code Playgroud)
差不看起来不起眼,但它的意思是,左边的===方法被调用,而不是在语言级别上定义了一些神奇的运营商,这跟==但并不完全.而是在每个使用它的类中定义===,可能在继承类或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
Run Code Online (Sandbox Code Playgroud)
查看文档,了解您在===或when语句左侧使用的类型,以确定具体如何.
| 归档时间: |
|
| 查看次数: |
9132 次 |
| 最近记录: |