40 lines
849 B
Forth
40 lines
849 B
Forth
include FMS-SI.f
|
|
include FMS-SILib.f
|
|
:class Eatable
|
|
:m eat ." successful eat " ;m
|
|
;class
|
|
|
|
\ FoodBox is defined without inspecting for the eat message
|
|
:class FoodBox
|
|
object-list eatable-types
|
|
:m init: eatable-types init: ;m
|
|
:m add: ( obj -- )
|
|
dup is-kindOf Eatable
|
|
if eatable-types add:
|
|
else drop ." not an eatable type "
|
|
then ;m
|
|
:m test
|
|
begin eatable-types each:
|
|
while eat
|
|
repeat ;m
|
|
;class
|
|
|
|
FoodBox aFoodBox
|
|
Eatable aEatable
|
|
aEatable aFoodBox add: \ add the e1 object to the object-list
|
|
aFoodBox test \ => successful eat
|
|
|
|
:class brick
|
|
:m eat cr ." successful eat " ;m
|
|
;class
|
|
|
|
brick abrick \ create an object that is not eatable
|
|
abrick aFoodBox add: \ => not an eatable type
|
|
|
|
:class apple <super Eatable
|
|
;class
|
|
|
|
apple anapple
|
|
anapple aFoodBox add:
|
|
aFoodBox test \ => successful eat successful eat
|