为什么 MyObject.new.class === MyObject 的计算结果为 false?

发布于 2024-12-21 15:18:14 字数 257 浏览 0 评论 0原文

我执行以下操作,其计算结果为 false

MyObject.new.class === MyObject

但是,

MyObject.new.class == MyObject

计算结果为 true。有更多 Ruby 背景的人可以向我解释一下这一点吗?是否可以使用 == 来实现此目的?

I do the following, and it evaluates to false:

MyObject.new.class === MyObject

However,

MyObject.new.class == MyObject

evaluates to true. Can someone with a bit more Ruby background explain this to me, and if it's okay to use == for this purpose?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧夏天 2024-12-28 15:18:14

在 Ruby 中,=== 并不是 == 的更严格版本,这与其他一些语言不同。

=== 方法有几个含义:

成员资格:

(1..10) === 5       # => true

测试参数是否是接收者的实例:

p MyObject.new.class === MyObject.new  # true; it's the same as 
p MyObject.new.is_a? MyObject

正则表达式匹配:

/\w+/ === "Ruby"

Case 语句:

year = 2011

case year
when 1901..2000
  puts 'Second millennium'
when 2001..2999
  puts 'Third millennium'
end

其他含义,请参见 ri ===

MyObject.new.class == MyObject 只是普通的相等测试(MyObject 是一个类对象,MyObject.new.class 是同一个类对象)

In Ruby, === isn't a stricter version of ==, as it is in some other languages.

The === method has several meanings:

Membership:

(1..10) === 5       # => true

Test whether the argument is an instance of the receiver:

p MyObject.new.class === MyObject.new  # true; it's the same as 
p MyObject.new.is_a? MyObject

Regex match:

/\w+/ === "Ruby"

Case statements:

year = 2011

case year
when 1901..2000
  puts 'Second millennium'
when 2001..2999
  puts 'Third millennium'
end

Other meanings, see ri ===

MyObject.new.class == MyObject is just a normal equality test (MyObject is a class object, and MyObject.new.class is the same class object)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文