Что вы должны понять, так это то, как Smalltalk работает с конструкторами - всегда проверяйте класс Class.
Если вы проверите Matrix class
, вы обнаружите, что #new:
внутренне использует ^ self rows: dimension columns: dimension
.Это означает, что вы:
aMatrix := Matrix new:3
на самом деле
aMatrix := Matrix rows: 3 columns: 3
, что, как оказалось, именно то, что вы ищете.
Вмои глаза, сообщение #new:
не является хорошим выбором.Я бы предпочел иметь #squareSize:
или что-то подобное.
Примечание: не используйте заглавные буквы для переменных (комментарий, основанный на вашем A :=
задании)
Редактировать: Почему бы не использовать заглавные буквы для локальных переменных / переменных экземпляра?
Заглавная буква в начале зарезервирована для глобальных переменных.У вас есть такие, как Transcript
, Smalltalk
и т. Д. Например, имена классов также являются глобальными, поэтому у вас есть Matrix
и , а не matrix
.Для экземпляра класса вы используете previx с a
или an
, как я использовал aMatrix
- это экземпляр класса Matrix
.
Могут быть различные различия между различными разновидностями Smalltalk.Например, в Smalltalk / X переменная класса начинается с заглавной буквы, что, как я мог видеть, не так в GNU Smalltalk.