在Ruby中,所有的class都是对象,是Class这个类的实例。
一、 类是对象
当我们编写一个新的class的时候(一般情况下使用class Name ... end ),我们实际上生成了一个Class类的对象同事将其赋予了一个全局变量(在这里Name就是这个全局变量)。当我们调用Name.new来创建一个新的对象的时候,我们默认地调用了Class中的new方法。我们可以通过覆写Class类中的new方法来证明这一点:
class Class alias oldNew new def new(*args) print "Creating a new ", self.name, "\n" oldNew(*args) end end class Name end n = Name.new
执行这段代码会产生这样的输出: Creating a new Name
二、Class.new do .... end
fred = Class.new do def meth2 "hello" end def meth3 "bye" end end a = fred.new #=> #<#<Class:0x100381890>:0x100376b98> a.meth2 #=> "hello" a.meth3 #=> "bye"
上面代码中的block实现了跨越ruby作用域门的作用。实际上是对Class类的覆写,不过显得更加ruby way。至于这样的做有什么大用处,我还没想通,还需要在以后的源代码阅读中认真体会。
三、 私有方法inherited
class Foo def self.inherited(subclass) puts "New subclass: #{subclass}" end end class Bar < Foo end class Baz < Bar end
上面这段代码会产生下面的输出:
New subclass: Bar
New subclass: Baz
这应该也算是ruby元编程的一点点内容吧,类似于included,当Foo类被继承的时候,子类会自动的向这个私有方法传递子类类名并且执行该方法内的代码。也应该用处。之前在Rails源代码中遇见过。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。