本文簡要介紹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類。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。