41 lines
716 B
Plaintext
41 lines
716 B
Plaintext
{
|
|
type Delegator
|
|
|
|
F init(d:Delegator) d.delegate = null
|
|
|
|
F default_impl(d:Delegator) 'default implementation'
|
|
|
|
F operation(d:Delegator) default_impl(d)
|
|
|
|
F operation(d:Delegator) {
|
|
guard defined thing
|
|
guard thing is Fun
|
|
try {
|
|
d.delegate.thing()
|
|
}
|
|
catch(e:ImplNotFound) {
|
|
# Might be unrelated exception, so check and optionally rethrow
|
|
e.callable !== thing throws e
|
|
default_impl(d)
|
|
}
|
|
}
|
|
|
|
F operation(d:Delegator) {
|
|
guard d.delegate is Null
|
|
default_impl(d)
|
|
}
|
|
|
|
|
|
a = Delegator()
|
|
echo(a.operation())
|
|
|
|
# There is no method thing(s:Str)
|
|
a.delegate = "abc"
|
|
echo(a.operation())
|
|
|
|
# ... now there is method thing(s:Str)
|
|
F thing(s:Str) 'delegate implementation'
|
|
echo(a.operation())
|
|
|
|
}
|