Мне нужно было определить набор классов в Forth, где определенные имена методов могут повторяться в разных классах.
Окончательное решение должно работать на простом процессоре J1B в FPGA с Swapforth .Поэтому все должно быть максимально просто.
Поскольку Swapftorth включает в себя mini-oof.fs , я пытался использовать эту библиотеку, но она неправильно обрабатывает неуникальные имена методов.
Приведенный ниже код показывает проблему в Gforth, но в Swapforth он работает так же.Единственное отличие состоит в том, что в Gforth мне пришлось использовать «new» вместо «anew»:
require mini-oof.fs
object class
method y
method x
end-class wc1
:noname drop ." method x in wc1" ; wc1 defines x
:noname drop ." method y in wc1" ; wc1 defines y
object class
method x
method y
end-class wc2
:noname drop ." method x in wc2" ; wc2 defines x
:noname drop ." method y in wc2" ; wc2 defines y
wc1 new constant xx1
wc2 new constant xx2
Если я загружаю приведенный выше код в Gforth, а затем пытаюсь вызвать методы x и yОбъекты xx1 и xx2, я получаю следующие результаты:
xx1 x method y in wc1 ok
xx1 y method x in wc1 ok
xx2 y method y in wc2 ok
xx2 x method x in wc2 ok
Оказывается, что определение методов "x" и "y" для класса "wc2" повлияло на их определение для класса "wc1".Кажется, что после определения класса wc2 mini-oof просто переводит «x» в первый метод в любом классе и «y» во второй метод в любом классе.
Чтобы проверить эту гипотезу,Я добавил третий класс:
object class
method m1
method m2
end-class wc3
:noname drop ." method m1 in wc3" ; wc2 defines m1
:noname drop ." method m2 in wc3" ; wc2 defines m2
wc3 new constant xx3
Действительно, приведенные ниже тесты показывают, что x, y, m1, m2 просто переводятся в номера методов:
xx3 x method m1 in wc2 ok
xx3 y method m2 in wc2 ok
xx3 m1 method m1 in wc2 ok
xx1 m1 method y in wc1 ok
Есть лиеще одна простая библиотека Forth, которая поддерживает классы с неуникальными именами методов?