我正在学习ruby对象模型,有一些问题。我理解对象只存储示例变量,方法存储在类中,对象引用类。我也理解“self”的概念--它是什么,它是如何变化的,等等。
然而,我不明白的是“类是对象”的概念,有没有好的、直观的解释?
(BTW:我使用Ruby Object Model and Metaprogramming和Metaprogramming Ruby作为我的两个资源。如果有人能提出其他建议,那将是很有帮助的。
谢谢。
我正在学习ruby对象模型,有一些问题。我理解对象只存储示例变量,方法存储在类中,对象引用类。我也理解“self”的概念--它是什么,它是如何变化的,等等。
然而,我不明白的是“类是对象”的概念,有没有好的、直观的解释?
(BTW:我使用Ruby Object Model and Metaprogramming和Metaprogramming Ruby作为我的两个资源。如果有人能提出其他建议,那将是很有帮助的。
谢谢。
6条答案
按热度按时间bvn4nwqk1#
这就是听起来的意思--类是对象,具体来说,它们是类
Class
的示例,类Class
本身是类Module
的子类,类Module
又是类Object
的子类,就像Ruby中的其他类一样,类可以响应消息,拥有自己的示例变量,等等。作为一个实际的例子,让我们以
private
为例。这给Person的示例提供了访问人的名字和身高的公共方法,但是访问人的体重的访问器是私有的。BUTBUTBUT --与大多数语言中的关键字不同,
private
是Module类的一个普通方法。如果我们愿意,我们可以重新定义它来为特定的类层次做一些不同的事情。klh5stk12#
我的机会来了。
在Ruby中,类是对象,通常有
Class
类,比如Foo
类。毫无疑问,你以前见过这种情况,它并不令人兴奋,但我们也可以这样定义
Foo
:就像你通过调用
Foo.new
创建一个新的Foo
一样,你也可以通过调用Class.new
创建一个新的Class
,然后你通过赋值给予这个类命名为Foo
,就像其他变量一样,这就是它的全部内容。dgjrabp23#
"类是对象"的概念(我的理解是)意味着你可以用对象做的任何事情,你都可以用类来做。
这与其他编程语言不同,在其他编程语言中,类和类定义是不同于对象的特殊工件,并且通常不能由运行库访问。
例如,在Ruby中,你可以在运行时修改任何对象,因为类也是对象,你可以修改类本身,在运行时添加方法,删除方法,或者在运行时添加和删除属性。
例如:
这在其他区分对象和类的编程语言中是不可能的。
注意:也许你应该在学习元编程之前了解基本的Ruby概念,因为这可能会让你感到困惑,这就是我要做的。
ax6ht2ek4#
看看这篇文章,你可能会发现它很有帮助:
The Ruby Object Model - Structure and Semantics
就我个人而言,我通过阅读Smalltalk了解了很多关于Ruby对象模型的知识(例如,在Squeak文档中),并且根据您对C语言的熟练程度,MRI源代码非常容易理解,并能给出最明确的答案。
fd3cxomn5#
当你想到它的时候,
new
作为一个函数是完全合乎逻辑的,对吗?一个创建并返回一个新对象的函数。(不像大多数其他语言,new
是某种运算符或语言构造。)进一步说,对于这个函数
new
来说,更符合逻辑的是,它应该是一个方法,如果我们谈论的是面向对象语言,谁的方法?,一个对象的方法,仅仅是一个有点不同的对象,我们可以称之为“类”。因此,从这个Angular 看,类只是特殊类型的对象,除了其他特性之外,类还具有方法
new
,并且知道如何基于它们自己的图像创建其他对象。ttisahbt6#
我不明白的是“类是对象”这个概念。有没有一个好的,直观的解释?
An answer to SO thread `Visual representation of Ruby Object Model'链接到一个关于这个主题的优秀视频。