现在的位置: 首页 > 综合 > 正文

关于ruby的new方法的一点思考

2014年02月16日 ⁄ 综合 ⁄ 共 951字 ⁄ 字号 评论关闭

对象方法的查找走向为:eigenclass -> MyClass -> Module -> Object(superclass) -> Kernel -> method_missing

类方法的查找走向为:eigenclass-> Class -> Module -> Object

Class中有两个new方法,一个为类方法Class.new,一个为实例方法new。

  • Class.new

下面是ruby语言参考里的一段话:

新生成一个无名的superclass的子类. 若省略superclass则生成Object的子类.

首次访问无名类的类名时, 将会搜索已赋值的常数名,然后把找到的常数名当做类名.

这样,我们就可以用一个常数名来构建一个新的Object子类了 

类与模块分别是类Class和Module的实例

M = Module.new
C = Class.new
D = Class.new(C){
       include M
}

把匿名模块或类赋给一个常量,那么常量的名字就是这个类或模块的名字。

所以我们可以这样写如下代码:

  1. class Point  
  2.   def initialize(x,y)  
  3.     @x@y = x,y  
  4.   end  
  5.     
  6.   attr_reader  :x :y  
  7.     
  8.   def distance(point)  
  9.     Math.hypot(point.x - x, point.y - y)  
  10.   end  
  11. end   

这两段功能是相似的

  1. Point = Class.new do  
  2.   def initialize(x,y)  
  3.     @x@y = x,y  
  4.   end  
  5.   
  6.   attr_reader  :x :y  
  7.   
  8.   def distance(point)  
  9.     Math.hypot(point.x - x, point.y - y)  
  10.   end  
  11. end  
  • Class的new实例方法

Class里面的实例方法new是专门给类准备的,这个方法能让类完成如下操作

Class C
end
c = C.new

算法要找到一个类方法C.new,最后会在Class的实例方法中找到,因为“类”本身就是Class的一个实例。

--------(ruby编程语言 P272)

抱歉!评论已关闭.