189 8069 5689

ruby编程API阅读之Class类-创新互联

在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     #=> #<#: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类-创新互联
浏览地址:http://cdxtjz.com/article/copcjo.html

其他资讯