ruby编程API阅读之Class类
在Ruby中,所有的class都是对象,是Class这个类的实例。
一、 类是对象
当我们编写一个新的class的时候(一般情况下使用class Name ... end ),我们实际上生成了一个Class类的对象同事将其赋予了一个全局变量(在这里Name就是这个全局变量)。当我们调用Name.new来创建一个新的对象的时候,我们默认地调用了Class中的new方法。我们可以通过覆写Class类中的new方法来证明这一点:
classClassaliasoldNewnewdefnew(*args)print"Creatinganew",self.name,"\n"oldNew(*args)endendclassNameendn=Name.new
执行这段代码会产生这样的输出: Creating a new Name
二、Class.new do .... end
fred=Class.newdodefmeth2"hello"enddefmeth3"bye"endenda=fred.new#=>#<#<Class:0x100381890>:0x100376b98>a.meth2#=>"hello"a.meth3#=>"bye"
上面代码中的block实现了跨越ruby作用域门的作用。实际上是对Class类的覆写,不过显得更加ruby way。至于这样的做有什么大用处,我还没想通,还需要在以后的源代码阅读中认真体会。
三、 私有方法inherited
classFoodefself.inherited(subclass)puts"Newsubclass:#{subclass}"endendclassBar<FooendclassBaz<Barend
上面这段代码会产生下面的输出:
New subclass: Bar
New subclass: Baz
这应该也算是ruby元编程的一点点内容吧,类似于included,当Foo类被继承的时候,子类会自动的向这个私有方法传递子类类名并且执行该方法内的代码。也应该用处。之前在Rails源代码中遇见过。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。