关于Ruby中OBJECTS的问题
我正在阅读’ruby中的元编程’
这是一本优秀的书.说真的,它谈到了我从未听过其他地方提到过的东西. 我有一些关于对象的具体问题(我在前几章) >我知道RubyGems gem将方法’gem’安装到模块Kernel,以便它显示在每个对象上.有没有理由他们没有把它放入Object类? 解决方法
>两者都可以工作,但通常Object上的方法应该只是处理特定对象的方法.内核模块中的内容不是关于对象而是更全局的.
>我认为这意味着“继承链”.因此,它在子类上查找该方法,然后在该类上查找父类,直到找到一个或用完父类. > Object自然是所有对象的基类(至少对于ruby 1.8).疯狂的部分是一个类实际上是Class类的一个实例. (您遵循这个?)因此,向Class添加实例方法会向类对象添加方法,但不会向这些类添加实例. >ruby中几乎所有东西都是物体. Class.superclass实际上是Module(它就像一个你无法实例化的类),Module.superclass返回Object.所以Class<模块<如果是Class类,Object是继承链. (至少为ruby1.8) >比任何事情更多的约定.由于Object可能会变得相当巨大,因此习惯上将事物放入模块中,然后再将这些模块组合起来.如果该方法不直接将对象的实例作为self处理,则该方法不直接属于Object.像gem这样的更多全局非对象实例方法在内核模块中表示它们只是在任何地方都可用的方法. 关于类对象和继承的更多内容…… class Foo < Bar def hi puts 'Hi!' end end 这样做真的很棒.当然,它定义了一个类对象.现在,这个类对象被配置为具有名称Foo,父类Bar和方法hi.此信息有点像此类对象的元数据. 现在,类对象Foo本身就是Class的一个实例.但是Foo定义了一个继承自Bar的类. Class类定义了一个数据结构来存储关于类的元数据. 你可以认为Class类sorta有点像这样定义: 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 所以类对象本身将从Class继承,但它会创建不包含的对象. 将类作为对象的思考可能会以这种方式弯曲,但这也是为什么ruby非常棒. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |