41 lines
1.0 KiB
Rexx
41 lines
1.0 KiB
Rexx
delegator = .delegator~new -- no delegate
|
|
say delegator~operation
|
|
-- an invalid delegate type
|
|
delegator~delegate = "Some string"
|
|
say delegator~operation
|
|
-- a good delegate
|
|
delegator~delegate = .thing~new
|
|
say delegator~operation
|
|
-- a directory object with a thing entry defined
|
|
d = .directory~new
|
|
d~thing = "delegate implementation"
|
|
delegator~delegate = d
|
|
say delegator~operation
|
|
|
|
-- a class we can use as a delegate
|
|
::class thing
|
|
::method thing
|
|
return "delegate implementation"
|
|
|
|
::class delegator
|
|
::method init
|
|
expose delegate
|
|
use strict arg delegate = .nil
|
|
|
|
::attribute delegate
|
|
|
|
::method operation
|
|
expose delegate
|
|
if delegate == .nil then return "default implementation"
|
|
|
|
-- Note: We could use delegate~hasMethod("THING") to check
|
|
-- for a THING method, but this will fail of the object relies
|
|
-- on an UNKNOWN method to handle the method. By trapping
|
|
-- NOMETHOD conditions, we can allow those calls to go
|
|
-- through
|
|
signal on nomethod
|
|
return delegate~thing
|
|
|
|
nomethod:
|
|
return "default implementation"
|