我正在阅读 smalltalk 中的代理模式实现,它是使用 dosNotUnderstand 实现的。我没有得到它什么时候会像场景中那样调用这个方法。有人可以给我一个例子/场景。
问问题
525 次
2 回答
5
doesNotUnderstand:
或者如果方法查找失败,则调用 DNU 而不是原始消息。下面的例子,
nil aSelectorThatDoesNotExist
触发 Object 上的默认 DNU,这将引发MessageNotUnderstood
异常。
doesNotUnderstand:
您可以使用该协议轻松地将消息发送委托给另一个对象。例如,如果我在我的Proxy
,
doesNotUnderstand: aMessage
^ target perform: aMessage selector withArguments: aMessage arguments
它将所有未在Proxy
自身上实现的消息转发到另一个target
对象。这里重要的是Proxy
对象应该实现尽可能少的方法,否则它们不能被转发。出于这个原因, Pharo或Squeak有一个ProtoObject
只实现一组基本方法的方法。通常,代理继承自ProtoObject
.
于 2013-04-24T10:38:22.277 回答
0
更简单地说,“执行”就像 Lisp 的“应用”。(应用 aFunction anArgumentList)
aFunction 和 anArgumentList 是要评估的表达式。
例子:
(申请(汽车'(* +))'(2 3 4))= 24
(应用 (cadr '(* +)) '(2 3 4)) = 9
它可以实现计算的函数调用,(以及扩展计算的消息发送)。
于 2013-12-06T10:02:37.270 回答