##委托实例方法
require 'forwardable'
class Person
attr_accessor :name, :sex
def initialize(name, sex)
@name, @sex = name, sex
end
end
class Man
extend Forwardable
def_delegators :@person, :name, :sex #将name和sex方法委托给@person,在Man实例上调用name方法相当于调用@person的name方法
def initialize(person)
@person = person
end
end
person = Person.new "fxhover", "man"
man = Man.new person
puts man.name #fxhover
puts man.sex #man
##委托类方法
require 'forwardable'
class Person
class << self
def username
'fxhover'
end
def age
27
end
end
end
class Customer
extend SingleForwardable
def_delegators :Person, :username, :age
end
puts Customer.username
puts Customer.age