本文简要介绍ruby语言中 SimpleDelegator类
的用法。
Delegator
的具体实现,此类提供了将所有支持的方法调用委托给传递给构造函数的对象的方法,甚至可以在以后使用#__setobj__ 更改委托给的对象。
class User
def born_on
Date.new(1989, 9, 10)
end
end
require 'delegate'
class UserDecorator < SimpleDelegator
def birth_year
born_on.year
end
end
decorated_user = UserDecorator.new(User.new)
decorated_user.birth_year #=> 1989
decorated_user.__getobj__ #=> #<User: ...>
SimpleDelegator
实例可以利用 SimpleDelegator
是 Delegator
的子类这一事实来调用 super
以在被委托的对象上调用方法。
class SuperArray < SimpleDelegator
def [](*args)
super + 1
end
end
SuperArray.new([1])[0] #=> 2
这是一个简单的示例,它利用了 SimpleDelegator 的委托对象可以随时更改这一事实。
class Stats
def initialize
@source = SimpleDelegator.new([])
end
def stats(records)
@source.__setobj__(records)
"Elements: #{@source.size}\n" +
" Non-Nil: #{@source.compact.size}\n" +
" Unique: #{@source.uniq.size}\n"
end
end
s = Stats.new
puts s.stats(%w{James Edward Gray II})
puts
puts s.stats([1, 2, 3, nil, 4, 5, 1, 2])
打印
Elements: 4 Non-Nil: 4 Unique: 4 Elements: 8 Non-Nil: 7 Unique: 6
相关用法
- Ruby SimpleDelegator.__setobj__用法及代码示例
- Ruby SizedQueue clear()用法及代码示例
- Ruby SizedQueue push()用法及代码示例
- Ruby SizedQueue shift()用法及代码示例
- Ruby Signal.trap用法及代码示例
- Ruby SizedQueue enq()用法及代码示例
- Ruby SizedQueue max()用法及代码示例
- Ruby SizedQueue empty?用法及代码示例
- Ruby SingleForwardable模块用法及代码示例
- Ruby SizedQueue pop()用法及代码示例
- Ruby SizedQueue new()用法及代码示例
- Ruby SizedQueue length()用法及代码示例
- Ruby SignalException类用法及代码示例
- Ruby SizedQueue deq()用法及代码示例
- Ruby SingleLine.new用法及代码示例
- Ruby SingleForwardable.def_single_delegators用法及代码示例
- Ruby Singleton模块用法及代码示例
- Ruby Signal.list用法及代码示例
- Ruby SizedQueue close()用法及代码示例
- Ruby Signal模块用法及代码示例
- Ruby Signal.signame用法及代码示例
- Ruby SizedQueue size()用法及代码示例
- Ruby SizedQueue max=用法及代码示例
- Ruby Symbol capitalize用法及代码示例
- Ruby Spotter.spot_op_asgn2_for_name用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 SimpleDelegator类。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。