RosettaCodeData/Task/Delegates/Elena/delegates-2.elena

48 lines
762 B
Text
Raw Permalink Normal View History

2019-09-12 10:33:56 -07:00
import extensions;
import system'routines;
2017-09-23 10:01:46 +02:00
class Operable
{
2019-09-12 10:33:56 -07:00
Operable = self;
2017-09-23 10:01:46 +02:00
2019-09-12 10:33:56 -07:00
operate()
= "delegate implementation";
2017-09-23 10:01:46 +02:00
}
class Delegator
{
2019-09-12 10:33:56 -07:00
prop object Delegate;
constructor()
{
Delegate := nil
}
operate()
{
2017-09-23 10:01:46 +02:00
// if the object does not support "get&operable" message - returns nil
2019-09-12 10:33:56 -07:00
var operable := Delegate.Operable \ back:nil;
if (nil == operable)
{
^ "default implementation"
}
else
{
^ operable.operate()
}
}
2017-09-23 10:01:46 +02:00
}
2019-09-12 10:33:56 -07:00
public program()
{
var delegator := new Delegator();
2017-09-23 10:01:46 +02:00
2020-02-17 23:21:07 -08:00
new::(nil, new Object(), new Operable()).forEach:(o)
2019-09-12 10:33:56 -07:00
{
delegator.Delegate := o;
2017-09-23 10:01:46 +02:00
2019-09-12 10:33:56 -07:00
console.printLine(delegator.operate())
}
}