2013-09-22 4 views
0

Извинения за вопрос новичков, но я не смог это понять, несмотря на длительную попытку.Cincom Visualworks Smalltalk - метод класса Инициализация

Я создал класс матрицы, используя функцию NewClass в Visual Cinema.

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. –

Смежные вопросы