Ruby。 class Class中大小写相等的方法是如何实现的?
Ruby. How is the case equality method implemented in the class Class?
===
和 ==
方法在 class Class
中的实现方式不同是否有任何特殊原因?
"".class == String
#=> true
"".class === String
#=> false
===
(称为“案例质量”)的目标是在 case
声明中使用。创作者决定将 ===
与 is_a?
别名用于 Module
实例最适合以下常见场景:
def do_sth(object)
case object
when :nothing then ...
when String then ...
when Hash then ...
else ...
end
===
应该(几乎)永远不会在 case
语句之外显式使用。
我认为我们可以进一步简化您的问题。
我相信你问的是为什么
String == String # true
但是
String === String # false
我认为 Ruby 是半一致的。 === 相等性询问右侧是否是左侧的成员。
所以
Class === String
为真,因为 String 是 Class 的成员。确实 String 不是 String 的成员。
不过我觉得奇怪的是
5 === 5 # returns true
Imo 它应该 return false 与 String === String returning false 一致,但是对于原语 Ruby 有这个怪癖,可能所以它适用于 case声明。
===
和 ==
方法在 class Class
中的实现方式不同是否有任何特殊原因?
"".class == String
#=> true
"".class === String
#=> false
===
(称为“案例质量”)的目标是在 case
声明中使用。创作者决定将 ===
与 is_a?
别名用于 Module
实例最适合以下常见场景:
def do_sth(object)
case object
when :nothing then ...
when String then ...
when Hash then ...
else ...
end
===
应该(几乎)永远不会在 case
语句之外显式使用。
我认为我们可以进一步简化您的问题。 我相信你问的是为什么
String == String # true
但是
String === String # false
我认为 Ruby 是半一致的。 === 相等性询问右侧是否是左侧的成员。
所以
Class === String
为真,因为 String 是 Class 的成员。确实 String 不是 String 的成员。
不过我觉得奇怪的是
5 === 5 # returns true
Imo 它应该 return false 与 String === String returning false 一致,但是对于原语 Ruby 有这个怪癖,可能所以它适用于 case声明。