forwardable的应用场景:用作代理,通过def delegator和def delegators方法,指定实例对象和需要被代理的方法
#一般用法
require 'forwardable'
class RecordCollection
attr_accessor :records
extend Forwardable
#def_delegator的用法,接受实例变量,方法名和新的方法名
def_delegator :@records, :[], :record_number
end
r = RecordCollection.new
r.records = [4,5,6]
r.record_number(0) # => 4
class RecordCollection # re-open RecordCollection class
#def_delegators的用法,接受实例变量,和代理到实例变量上面的方法名
def_delegators :@records, :size, :<<, :map
end