Ruby 什么';s比较2个对象时==和===之间的差异

Ruby 什么';s比较2个对象时==和===之间的差异,ruby,Ruby,可能重复: 为什么==不起作用?我怎么知道这个方法呢?===属于(现在我猜它调用对象,或者对象),但是我怎么能确定呢?当===检查类型时,它通常只检查两个参数的值。它通常只检查两个参数的值,当===也检查类型时。重复: 案例平等。有关详细信息,请参阅文档。此方法通常在对象的子类中重写。例如: 大小写相等——如果一个对象是mod的实例或mod的后代之一,则返回true。对模块的使用有限,但可以在case语句中按类对对象进行分类 是另一个,在这种情况下,它是=~的同义词: a = "H

可能重复:


为什么
==
不起作用?我怎么知道这个方法呢?===属于(现在我猜它调用
对象
,或者
对象
),但是我怎么能确定呢?

当===检查类型时,它通常只检查两个参数的值。

它通常只检查两个参数的值,当===也检查类型时。

重复:

案例平等。有关详细信息,请参阅文档。此方法通常在
对象的子类中重写。例如:

大小写相等——如果一个对象是mod的实例或mod的后代之一,则返回true。对模块的使用有限,但可以在case语句中按类对对象进行分类

是另一个,在这种情况下,它是
=~
的同义词:

a = "HELLO"
case a
when /^[a-z]*$/; print "Lower case\n"
when /^[A-Z]*$/; print "Upper case\n"
else;            print "Mixed case\n"
end
IRB中的一个例子:

>> "a" === /a/
=> false
>> /a/ === "a"
=> true
记住,第一个返回false,因为您在
String
上执行的是
=
,而这不是同一件事。在第二个示例中,我们在
Regexp

最后,它在Range对象上调用了
include?
,并将您的值传入:

>> (1..100) === 3
=> true
>> (1..100) === 300
=> false
有关这些内容的列表,请查看核心文档,并在左侧框架的“方法”区域中搜索重复项:

案例平等。有关详细信息,请参阅文档。此方法通常在
对象的子类中重写。例如:

大小写相等——如果一个对象是mod的实例或mod的后代之一,则返回true。对模块的使用有限,但可以在case语句中按类对对象进行分类

是另一个,在这种情况下,它是
=~
的同义词:

a = "HELLO"
case a
when /^[a-z]*$/; print "Lower case\n"
when /^[A-Z]*$/; print "Upper case\n"
else;            print "Mixed case\n"
end
IRB中的一个例子:

>> "a" === /a/
=> false
>> /a/ === "a"
=> true
记住,第一个返回false,因为您在
String
上执行的是
=
,而这不是同一件事。在第二个示例中,我们在
Regexp

最后,它在Range对象上调用了
include?
,并将您的值传入:

>> (1..100) === 3
=> true
>> (1..100) === 300
=> false

对于这些列表,请查看核心文档并在左侧框架的“方法”区域中搜索
==
,我假设
==
表示它们具有相同的值,而
==
表示它们是相同的对象?正如前面多次回答的那样,
=
还要考虑对象的类型。@TyrantWave和@Ash--
==
没有类型检查的细节。当它在
对象的子类中被重写时。例如,
Range#==
在对象上执行
包含?
。在这种情况下,它不关心类型。这是和的副本。@yozloy在提问之前请先搜索。当你输入你的问题标题时,你会看到很多问题已经得到了回答。如果你点击其中一个,你会得到你的答案。假设我的答案回答了你的问题,请这样标记。我将把@sawa和@Jörg W Mittag提供的链接添加到我的回答中。我假设
==
表示它们具有相同的值,而
===
表示它们是相同的对象?正如前面多次回答的那样,
=
还要考虑对象的类型。@TyrantWave和@Ash--
==
没有类型检查的细节。当它在
对象的子类中被重写时。例如,
Range#==
在对象上执行
包含?
。在这种情况下,它不关心类型。这是和的副本。@yozloy在提问之前请先搜索。当你输入你的问题标题时,你会看到很多问题已经得到了回答。如果你点击其中一个,你会得到你的答案。假设我的答案回答了你的问题,请这样标记。我将把@sawa和@Jörg W Mittag提供的链接添加到我的答案中,
===
不检查类型,除非其中一个子类重写了它以这种方式工作
===
不检查类型,除非其中一个子类重写了它以这种方式工作