2013-09-22 49 views
0

對於新手問題抱有歉意,但儘管長時間嘗試,我仍未能確定。Cincom Visualworks Smalltalk - 類方法初始化

我在Cincom Visualworks中使用NewClass功能創建了一個矩陣類。

Smalltalk.Core defineClass: #Matrix 
    superclass: #{Core.Object} 
    indexedType: #none 
    private: false 
    instanceVariableNames: 'rowCount columnCount cellValues ' 
    classInstanceVariableNames: '' 
    imports: '' 
    category: '' 

增加了以下類方法:

withRowCount: rowCount withColumnCount: columnCount withCellValues: cellValues 
    ^self new rowCount: rowCount columnCount: columnCount cellValues: cellValues. 

增加了以下的存取方法:

cellValues 
    ^cellValues 
cellValues: anObject 
    cellValues := anObject 
columnCount 
    ^columnCount 
columnCount: anObject 
    columnCount := anObject 
rowCount 
    ^rowCount 
rowCount: anObject 
    rowCount := anObject 

我有這樣的代碼在工作區:

|myMatrix| 
myMatrix := Matrix rowCount: 5 columnCount: 5 cellValues: 5. 
Transcript show: (myMatrix rowCount). 

但是編譯器說:該消息未定義。 我想我的類方法沒有按預期工作。 有人可以指出我要去哪裏嗎?

回答

1

第一張:Matrix沒有rowCount:columnCount:cellValues:方法。你的意思可能是Matrix withRowCount: 5 withColumnCount: 5 withCellValues: 5

其次,我想方法返回最後一個表達式的值。所以鏈接方法並不像那樣工作。 (即使它沒有,這仍然看起來像一個消息。)

你的類的方法或許應該讀起來像

withRowCount: rowCount withColumnCount: columnCount withCellValues: cellValues 
    | newMatrix | 
    newMatrix := self new. 
    newMatrix rowCount: rowCount; 
       columnCount: columnCount; 
       cellValues: cellValues. 
    ^newMatrix 

;休息了消息,並告訴Smalltalk中發送所有三newMatrix

然後你可以使用它像

|myMatrix| 
myMatrix := Matrix withRowCount: 5 withColumnCount: 5 withCellValues: 5. 
Transcript show: (myMatrix rowCount). 
+0

這是一個真棒愚蠢的問題,從我! 我的代碼都很好,除了在類方法中,我沒有添加';'參數之間!大聲笑!浪費了6個小時。 \t withRowCount:rowCount withColumnCount:columnCount withCellValues:cellValues \t^self new rowCount:rowCount; columnCount:columnCount; cellValues:cellValues。 –

相關問題