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

10 篇文章 0 订阅

对象方法的查找走向为: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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值