This example works but i am not sure if i am doing this correctly:
\ ***************************
require objects.fs
object class
    cell% inst-var a
    m: ( na -- )
        a ! ;m method a!
    m: ( -- )
        ." at atest destruct" cr ;m method destruct
end-class atest

object class
    cell% inst-var holder
    m: ( -- )
        atest heap-new holder ! ;m overrides construct
    m: ( -- )
        cr holder @ .s cr [bind] atest destruct
        ." at ctest destruct" cr ;m method destruct
end-class ctest

ctest heap-new value c.test
c.test destruct cr ." ********"
\ ****************************************

Adding a new class with base clasee ctest and trying to access the destruct
method as follows does not work:
\ **********************************************************
require objects.fs
object class
    cell% inst-var a
    m: ( na -- )
        a ! ;m method a!
    m: ( -- )
        ." at atest destruct" cr ;m method destruct
end-class atest

object class
    cell% inst-var holder
    m: ( -- )
        atest heap-new holder ! ;m overrides construct
    m: ( -- )
        cr holder @ .s cr [bind] atest destruct
        ." at ctest destruct" cr ;m method destruct
end-class ctest

ctest heap-new value c.test
c.test destruct cr ." ********"

 ctest class
    cell% inst-var holder2
    m: ( -- )
        this [parent] construct
        atest heap-new holder2 ! ;m overrides construct
    m: ( -- )
        this [parent] destruct
        cr holder2 @ .s cr [bind] atest destruct
        ." at btest destruct" cr ;m overrides destruct
 end-class btest

 btest heap-new value b.test
 b.test destruct cr ." *********"
\ ************************************************************

Now i think i should be able to get this to work if i use interfaces or if
i implement the methods later in the code from the class code but i have
not done this to be sure if it will work!
My question is what am i doing wrong in the above code?  I want to
basically have a destructor method that could be used to free dynamically
created stuff.  But because the name is not unique from class to class i
need to bind it to the class the destructor is from.  Is this binding
possible inside a class directly or not?  Is it possible to have methods
named the same ... it would seem to me that this should be possible because
the base class object has construct and print methods and we access them by
using "this [parent]" i believe.
I know i can get around the problem by having unique names for every method
but i find objects to be a cleaner way to make self documenting code when i
use an object that is.
Simply is it possible to bind to a method inside a class definition like i
am trying above and if not why does it work in the first example?
I am using Gforth ver 0.7.3 currently !
Thanks as always for the great work i know so many people have done with
Gforth!

-- 
                \|||/
-----0oo---( o o )---oo0------
                (_)
>From the hand of PKS

Reply via email to