#单件方法
例子
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