RosettaCodeData/Task/Delegates/Elena/delegates-2.elena
2026-02-01 16:33:20 -08:00

47 lines
771 B
Text

import extensions;
import system'routines;
class Operable
{
Operable = self;
operate()
= "delegate implementation";
}
class Delegator
{
object? Delegate : prop;
constructor()
{
Delegate := nil
}
operate()
{
// if the object does not support "Operable" message - returns nil
var operable := Delegate?.Operable \ back(nil);
if (nil == operable)
{
^ "default implementation"
}
else
{
^ operable.operate()
}
}
}
public Program()
{
var delegator := new Delegator();
new object[]{nil, new Object(), new Operable()}.forEach::(o)
{
delegator.Delegate := o;
Console.printLine(delegator.operate())
}
}