September 2017 Update

This commit is contained in:
Ingy döt Net 2017-09-23 10:01:46 +02:00
parent bba7bfd280
commit ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions

View file

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

View file

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

View file

@ -1,48 +0,0 @@
#import system.
#import system'routines.
#class Operable
{
#method cast:verb &to:target
= target::verb eval &delegate:$self.
#method operate
= "delegate implementation".
}
#class Delegator
{
#field theDelegate.
#constructor new
[
theDelegate := nil.
]
#method set &Delegate:obj
[
($nil == obj)
? [ theDelegate := nil. ]
! [ theDelegate := obj. ].
]
#method operate
= theDelegate cast:%eval &to:
{
delegate : o = o operate.
! : o = "default implementation".
}.
}
#symbol program =
[
#var delegator := Delegator new.
($nil, Object new, Operable new) run &each: o
[
delegator set &Delegate:o.
console writeLine:(delegator operate).
].
].