[读书笔记]Ruby 元编程4


#单件方法

例子

c = Class.new(Array)
c.send :define_method, :my_method do
  'Hello!'
end
MyClass = c
# puts c.name
obj = MyClass.new
# puts obj.my_method
#给obj对象定义单件方法,而这个方法只属于obj自己。
def obj.print_my_method
  puts self.my_method
end

obj.print_my_method

例子2:更换旧方法

class MyClass
  def print_to(name)
    puts "print to #{name}"
  end
  def self.deprecate(old_method,new_method)
    define_method old_method do |*args,&block|
      warn "Warning : #{old_method}() is deprecate. Use #{new_method}"
      send(new_method,*args,&block)
    end
  end
  
  deprecate :print_to_name , :print_to
end

obj = MyClass.new
# obj.print_to("Bill")
obj.print_to_name("Bill")


extend 类扩展

attr_accessor 生成属性 等同 attr_reader 与 attr_writer 集合

例子

module MyModule
  def my_method ;'hello';end
end

class MyClass  
  attr_accessor :v
  extend MyModule
  def eign
    class << self
      self
    end
  end
end

puts MyClass.my_method
puts MyClass.new.eign.my_method
obj = MyClass.new
obj.v = 2
puts obj.v

alias #别名 #环绕别名

require 'Test/Unit'

class Fixnum
  alias :origin_add :+
  def +(num)
    origin_add( num ).origin_add 1
    
  end
end

class MyTest < Test::Unit::TestCase
  def test_math
    assert_equal 3 , 1 + 1
  end
end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值