为新手问题道歉,但尽管经过长时间的尝试,我还是没想到这一点。
我在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).
但编译器说该消息未定义。 我猜我的班级方法没有按预期工作。 有人可以指出我哪里出错吗?
答案 0 :(得分: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).