33 lines
746 B
Plaintext
33 lines
746 B
Plaintext
Delegator ::= Object clone tap {
|
|
self delegate := Nil.
|
|
self clone := {
|
|
Parents above (parent self, 'clone) call tap {
|
|
self delegate := #'(self delegate).
|
|
}.
|
|
}.
|
|
self operation := {
|
|
localize.
|
|
if { this delegate slot? 'thing. } then {
|
|
this delegate thing.
|
|
} else {
|
|
"default implementation".
|
|
}.
|
|
}.
|
|
}.
|
|
|
|
Delegate ::= Object clone tap {
|
|
self thing := "delegate implementation".
|
|
}.
|
|
|
|
;; No delegate
|
|
foo := Delegator clone.
|
|
println: foo operation. ;; "default implementation"
|
|
|
|
;; Delegate which lacks `thing`
|
|
foo delegate := Object.
|
|
println: foo operation. ;; "default implementation"
|
|
|
|
;; Delegate which implements `thing`
|
|
foo delegate := Delegate.
|
|
println: foo operation. ;; "delegate implementation"
|