gpt4 book ai didi

ruby 三等

转载 作者:数据小太阳 更新时间:2023-10-29 06:42:02 24 4
gpt4 key购买 nike

假设我有以下代码。

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 中。

三等号的一般定义是,如果两部分相同或者如果右边的部分包含在左边的范围内,则返回真。

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

when of 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 语句中使用的类型的文档,以确保事情是如何进行的。

关于 ruby 三等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5616912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com