"baz"-6ren">
gpt4 book ai didi

ruby - 为什么 "foo".class === String 返回 false?

转载 作者:数据小太阳 更新时间:2023-10-29 07:25:33 26 4
gpt4 key购买 nike

当这没有像我预期的那样工作时,我开始好奇:

var = "foo"
case var.class
when String
puts "bar"
else
puts "baz"
=> "baz"

我知道 case 语句使用的是 ===,但我不明白 === 的作用。文档说...

Case Equality – For class Object, effectively the same as calling #==, but typically overridden by descendants to provide meaningful semantics in case statements.

http://ruby-doc.org/core-2.2.3/Object.html#method-i-3D-3D-3D

这是否意味着 Class(或其模块之一)中的 === 覆盖了 Object 中的 ===?我很困惑。

最佳答案

===Class 对象(更一般地说,Module objects)覆盖,表示“右侧是左侧的实例边”。

例如:

>> String === ""
=> true
>> Class === String
=> true

这是不符合直觉的,但却是事实。但是,它确实使您尝试做的事情变得更短:

var = "foo"
case var
when String
puts "bar"
else
puts "baz"
end
# outputs "bar", since String === "foo"

这就是您的尝试失败的原因:Ruby 评估 String === String,这是错误的,因为 String 类本身不是字符串。

关于ruby - 为什么 "foo".class === String 返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34010102/

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