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源代码中遇见过。


标题名称:ruby编程API阅读之Class类
新闻来源:http://scyanting.com/article/jopcsh.html