Ruby元编程笔记一

打开类

通过

class String
  def to_alphanumeric
    gsub /[^\w\s]/,''
  end
end

可以直接打开已有的类并给其添加方法,class关键字的核心任务是把你带入到类的上下文中,让你可以定义其中的方法。 
如果方法名重合,那么会覆盖原来的方法,这称为“猴子补丁(Moneypatch)”。

对象和方法

class MyClass
  def my_method
    @v=1
  end
end
obj = MyClass.new

obj #=> <MyClass:0x007f8e42830838 @v=1>  #obj作为一个实例对象包含一个实例变量@v和一个类MyClss
obj.class  #=>MyClass
obj.my_method
obj.instance_variables #=>[:@v]

obj.methods.grep(/my/)  #=>[:my_method] 
MyClass.instance_methods(false) #=>[:my_method] 
MyClass.methods.grep(/my/) #=>[]       
#通过对比可以看出,my_method是MyClass的一个实例方法,只有当MyClass实例化后才能调用,MyClass类本身并没有这个方法。

MyClass.class #=>Class
#类也是对象,它包含一个叫Class的类。

类与模块

Class.superclass #=>Module
#Class的超类是Module,Class实际就是一个增加了new(),allocate(),superclass()的Module,Class是Module的子类.
#所有的类都最终继承于Object,Object继承于BasicObject

以Rake为例:

module Rake
  class Task
   #...
   #使用Rake::Task来拓展命名空间

关于常量:

module MyModule
  MyContent = "aaa"
  class MyClass
    MyContent = "bbb"
  end
end      
#对于常量MyContent,也可以使用MyModule::MyClass::MyContent这样的格式来引用

Kernel模块

Object引用了Kernel模块,因此Kernel模块中的方法可以对任何对象使用。那么可以用类似打开类的方式给Kernel增加方法(称为“内核方法”)

module Kernel
  def my_method
  end
end

self

class MyClass
  def testing_self
    @var = 10
    self.my_method()
  end
  def my_method
    @var = @var+1
  end
end
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值