delegation

[b]目的·概要[/b]

负责进行方法的委托(delegation)。

Delegator类会委托指定的对象执行某方法. 在使用Delegator类时, 要先继承它,然后对__getobj__方法进行再定义, 以便指定接受委托的对象.

SimpleDelegator是Delegator的一个实用例子, 它委托构造函数所接收到的对象来执行某方法.

DelegateClass(supperclass)函数负责定义并返回一个委托类, 该类会委托superclass类的某个对象来执行实例方法.

[b]类[/b]
Delegator
SimpleDelegator
[b]范例代码[/b]
require 'delegate'
foo = Object::new
def foo.test
p 25
end
foo2 = SimpleDelegator::new(foo)
foo2.test # => 25

class ExtArray<DelegateClass(Array)
def initialize()
super([])
end
end
a = ExtArray::new
p a.type # => ExtArray
a.push 25
p a # => [25]

[b]Delegator[/b]
该类为给出的对象提供委托用的方法定义。

在构造函数内部那些被指定对象的实例方法中,定义委托方法, 使得那些不属于自己的方法可以向返回__getobj__的对象进行委托操作.

[b]实例方法[/b]
Delegator#initialize(obj)
定义实例方法,使得obj中不属于自己的实例方法可以向返回__getobj__的对象进行委托操作.

Delegator#__getobj__
返回接受委托的对象. 默认情况下, 它会引发NotImplementError, 所以必须在子类中进行再定义.

[b]SimpleDelegator[/b]
该类利用Delegator类, 委托指定对象执行某方法.

[b]上级类[/b]
Delegator

[b]类方法[/b]
SimpleDelegator.new(obj)
生成一个对象, 它委托obj来执行自身所拥有的方法。

[b]实例方法[/b]
SimpleDelegator#__getobj__
返回接受委托的对象。

SimpleDelegator#__setobj__(obj)
将接受委托的对象变为obj。

请注意, 因为只有在生成时才会进行委托方法的定义, 所以即使接受委托的对象和obj之间存在实例方法上的差异, 也无法再次设定委托实例方法.

[b]函数[/b]
DelegateClass(superclass)
定义并返回一个委托类, 它委托superclass类的实例来执行某方法.

[b]SEE ALSO[/b]
Object#method_missing(method_symbol, ...)
若对象中尚未定义某方法时, 就会调用该方法. 使用该方法, 您可以将自己不知道的方法委托给其他的对象.

例:

def hoge.method_missing(message, *arg)
@to_obj.send(message, *arg)
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值