2012-02-27 68 views
1

我想創建一個非常簡單的Vector類作爲Smalltalk中Array的子​​類。我創建類的代碼如下所示:Basic Smalltalk子類

Array subclass: #Vector 
Vector comment: 'I represent a Vector of integers' 

Vector class extend [ 
new [ 
    | r | 
    <category: 'instance creation'> 
    r := super new. 
    r init. 
    ^r 
    ] 
] 

Vector extend [ 
init [ 
    <category: 'initialization'> 
    ] 
] 

顯然我還沒有寫任何方法,但我只是試圖讓這部分工作第一。創建後的類如上,如果我輸入: 五:=矢量新:4 我得到錯誤:

Object: Vector error: should not be implemented in this class, use #new instead 
SystemExceptions.WrongMessageSent(Exception)>>signal (ExcHandling.st:254) 
SystemExceptions.WrongMessageSent class>>signalOn:useInstead: (SysExcept.st:1219) 
Vector class(Behavior)>>new: (Builtins.st:70) 
UndefinedObject>>executeStatements (a String:1) 
nil 

我曾以爲,既然是數組的一個子類,我可以創造一個矢量這種方式。做這件事的最好方法是什麼?謝謝!

編輯 - 我想通了。在深入閱讀教程之後,我發現我需要包含<形狀:#指針>

+0

我覺得你有這個人的同樣的問題:http://stackoverflow.com/questions/5613363/gnu-smalltalk-problem-with-example-in-tutorial-object-creation – andrewdotnich 2012-02-27 23:58:00

+0

我看着那個帖子,改變了這些事情,但我仍然得到了同樣的結果。 – FlapsFail 2012-02-28 02:36:56

回答

4

數組是一種特殊的類,具有不同長度的可索引實例。

在GNU Smalltalk中(你似乎使用)Array類被聲明爲:

​​

要繼承這個行爲,你可以使用:

Array subclass: Vector [<shape: #inherit>] 

但在大多數情況下,它使製作一個封裝了Array的類而不是從Array繼承的類更有意義。

這也是值得指出的是OrderedCollection是Smalltalk的相當於從C 矢量容器++和Java的。