在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源代码中遇见过。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文标题:ruby编程API阅读之Class类-创新互联
网站网址:https://www.cdcxhl.com/article20/copcjo.html
成都网站建设公司_创新互联,为您提供响应式网站、关键词优化、营销型网站建设、网站导航、全网营销推广、网站设计
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联