September Morn Update

This commit is contained in:
Ingy döt Net 2019-09-12 10:33:56 -07:00
parent 4e2d22a71d
commit aac6731f2c
6856 changed files with 141342 additions and 21127 deletions

View file

@ -1,54 +1,46 @@
import extensions.
import system'routines.
import extensions;
import system'routines;
class IOperable
interface IOperable
{
operate
[
NotSupportedException new; raise.
]
abstract operate() {}
}
class Operable :: IOperable
class Operable : IOperable
{
operate
= "delegate implementation".
constructor() {}
operate()
= "delegate implementation";
}
class Delegator
{
object theDelegate.
object theDelegate;
constructor new
[
theDelegate := nil.
]
set Delegate(object)
{
theDelegate := object
}
set Delegate:obj
[
if ($nil == obj)
[ theDelegate := $nil. ];
[ theDelegate := obj. ].
]
internal operate(operable)
= "default implementation";
operate(Object operable)
= "default implementation".
internal operate(IOperable operable)
= operable.operate();
operate(IOperable operable)
= operable operate.
operate
<= operate(theDelegate).
operate()
<= operate(theDelegate);
}
program =
[
var delegator := Delegator new.
public program()
{
var delegator := new Delegator();
(nil, Object new, Operable new) forEach(:o)
[
delegator Delegate := o.
new object[]{nil, new Object(), new Operable()}.forEach:(o)
{
delegator.Delegate := o;
console printLine(delegator operate).
].
].
console.printLine(delegator.operate())
}
}

View file

@ -1,53 +1,47 @@
import extensions.
import system'routines.
import extensions;
import system'routines;
class Operable
{
operable = $self.
Operable = self;
operate
= "delegate implementation".
operate()
= "delegate implementation";
}
class Delegator
{
object theDelegate.
prop object Delegate;
constructor new
[
theDelegate := nil.
]
constructor()
{
Delegate := nil
}
set Delegate:obj
[
if ($nil == obj)
[ theDelegate := $nil. ];
[ theDelegate := obj. ].
]
operate
[
operate()
{
// if the object does not support "get&operable" message - returns nil
var anOperable := theDelegate operable \ back:$nil.
var operable := Delegate.Operable \ back:nil;
if ($nil == anOperable)
[
^ "default implementation".
];
[
^ anOperable operate.
].
]
if (nil == operable)
{
^ "default implementation"
}
else
{
^ operable.operate()
}
}
}
program =
[
var delegator := Delegator new.
public program()
{
var delegator := new Delegator();
(nil, Object new, Operable new) forEach(:o)
[
delegator Delegate := o.
new object[]{nil, new Object(), new Operable()}.forEach:(o)
{
delegator.Delegate := o;
console printLine(delegator operate).
].
].
console.printLine(delegator.operate())
}
}