ruby - "Foo"和 "Foo.class"有什么区别?

标签 ruby

这些不应该是一样的吗?

p String.ancestors
p String.class.ancestors

相反,我得到:

[String, Comparable, Object, Kernel, BasicObject]
[Class, Module, Object, Kernel, BasicObject]

感谢您的帮助。

最佳答案

长话短说

Shouldn't these be the same?

不,他们不应该,为什么?

完整答案

Foo 之间的区别和 Foo.classf之间相同和 f.class

class Foo; end

f = Foo.new

f # => #<Foo:0x007ff289849170>
f.class # => Foo

Foo # => Foo
Foo.class # => Class

Foo是一个对象,Foo.class是它的类。

如您所见,类和类的类的层次结构 fork ,位于 Object。 .因为 ruby​​ 中的一切都是对象( block 除外 :))。但这不一定是这样,这只是 Matz 的设计决定(我猜是 Matz)。在某些语言中,这是两个完全独立的不相交的层次结构。你不要混合对象和它们的类。这就像混合甜蜜和方形的东西。

关于ruby - "Foo"和 "Foo.class"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15492092/

相关文章:

html - 将自定义 HTML ID 添加到 Rails 选择框

ruby - 基于用户定义的输入构建动态 if 语句

ruby-on-rails - Ruby on Rails 中的 Fields_for 方法

mysql - 环境中的 Ruby on Rails MySQL 套接字

ruby-on-rails - ActiveRecords 未正确序列化为 yaml

ruby-on-rails - Ruby gem cucumber SSL 错误和 Gem 源代码

java - Jruby "RuntimeHelpers"类已弃用

ruby - 是否需要卸载 ruby​​gems-update?

ruby - 如何将 FILETIME 转换为 Ruby 时间,反之亦然

ruby-on-rails - 为什么要使用相互的 has_one 关系?