关于Ruby中对象的问题
我在读“ruby中的元编程” 这是一本好书。说真的,它谈论的是我从未在别处听到过的东西 然而,我有一些关于对象的具体问题(我在前几章)关于Ruby中对象的问题,ruby,oop,object,Ruby,Oop,Object,我在读“ruby中的元编程” 这是一本好书。说真的,它谈论的是我从未在别处听到过的东西 然而,我有一些关于对象的具体问题(我在前几章) 我知道RubyGems gem将方法“gem”安装到模块内核,以便它显示在每个对象上。他们没有把它放到对象类中有什么原因吗 他谈到ruby在寻找这个方法时,总是会立即启动。“up”到底是什么意思?我在图表中看到了,只是我不太明白“向上”的目的。他对那部分解释得不多 对象类的意义是什么?为什么这些方法不能直接放入类中?如果每个对象都属于一个类(即使是它的类),那么
对象上的方法通常只应该是处理特定对象的方法。在内核
模块中放入的内容与对象无关,而更具全局性
Object
自然是所有对象的基类(至少对于ruby 1.8)。疯狂之处在于类实际上是类
类的实例。(你明白了吗?)所以将实例方法添加到Class
会将方法添加到类对象,但不会添加这些类的实例Class.superclass
实际上是Module
(类似于无法实例化的类),并且Module.superclass
返回对象
。因此Class
是继承链,如果Class
Class。(至少适用于ruby 1.8)对象
可能会变得相当庞大,因此通常会将对象放入模块中,然后再将这些模块组合起来。如果该方法不直接作为self
处理对象的实例,则该方法不直接属于object
。更多的全局非对象实例方法,如gem
进入Kernel
模块,表明它们只是无处不在的方法关于类对象和继承的更多信息
class Foo < Bar
def hi
puts 'Hi!'
end
end
因此类对象本身将继承自class
,但它将创建不继承的对象
以这种方式将类看作对象可能有点令人费解,但这也是ruby令人敬畏的原因。对于1和5,伪关键字命令倾向于进入内核而不是对象 对于2,子类相对于其父类“向下”是有意义的(子类的字面意思是“在下面”)。因此,如果您要访问父类及其祖先,则必须“向上” 对于3,一个
对象
对象不是类
的实例,它是对象
的实例
对于4,作为类的实例并从对象继承有什么不对?所有类都继承自对象。我认为在开始元编程之前,您需要尝试一本探讨面向对象编程基本原理的书。有很多,快速搜索就会找到它们。对于3:如果他们将这些方法放到类中,它们将对类的实例(字符串、数组等)可用,但对类的实例(字符串、新、数组等)不可用。对于4:类是对象的子类
Class.祖先#=>[类、模块、对象、内核、基本对象]
@Iain:“有很多,快速搜索就会找到它们。”-使用Ruby作为编程语言的书籍,或者使用其他语言(如Java和SmallTalk)的书籍?如果你对使用Ruby感兴趣,那么使用Ruby。否则,任何OO语言都将以类似的方式处理基本原理。不过,我确实认为Ruby是一个特别好的选择,因为我认为它的OO做得很好,语法/风格不会妨碍学习。@Iain:如果是这样,请列举一些探索面向对象编程基础知识并使用Ruby作为编程语言的好书。如果你不能实例化一个方法,那么,x=Module.new是怎么工作的呢?当你意识到Class.new.new的作用时,你就会知道它的作用了:)哦,我明白了。。。这必须是一个未命名的模块,如果有模块Hello,则不能执行Hello.new。因为module.new
生成一个新模块<代码>模块Foo将Foo
定义为模块类的实例<代码>模块Foo;结束;Foo.new会导致一个错误,证明您无法实例化模块(它是模块
的实例),但您可以实例化模块
(它是类
的实例)。
class Class < Module
# fictional method called on class creation
def set_meta_data(name, superclass, methods)
@name = name
@superclass = superclass
@methods = methods
end
# fictional way in which an instance might be created
def new
instance = Object.new
instance.superclass = @superclass
instance.addMethods(@methods)
instance
end
end