=== 2008/07/07 ===
思索如何在 forth 中引進物件。引進的方式必須和 eiffel 有很好的配合,又必須適合 dynamic language。一種方法是在 forth 使用 prototype,類似 Javascript 。
我希望觀念儘量和 Eiffel 接近。Forth 可以使用 Eiffel 的物件做為 prototype,再增加自己的資料。
此外,允許使用 x.y 的呼叫方式。此一方式必須符合 Eiffel 的各種規則。如果要對物件堆疊上的物件做處理,必須先給物件一個名字。以下是嘗試:
reference circle
create-circle
circle object!
circle.radius .
reference box
create-box
box object!
box.width .
reference circular-box
prototype circle
prototype box
嗯,似乎不容易以 prototype 方式建造這 circular-box 物件。
因此,解決的方法似乎還必須給予 reference 型別如下:
reference circular-box \ 無型別的 reference
prototype circle \ 具型別 circle
prototype box \ 具型別 box
create-method make-circular-box
origin3d 1.0 make-circle origin3d 1.0 1.0 1.0 make-box ;
create circular-box.make-circular-box
circle-box.radius .
circle-box.width .
如此建造出來的物件沒有 eiffel merge features 的能力。但似乎可用了。
在實現上,不急著做 prototype 。可以先做 x.y 這樣的呼叫。由 Eiffel 建立物件的 prototype。