當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Ruby SimpleDelegator類用法及代碼示例

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