Squeak: создание матрицы с указанными строками и столбцами - PullRequest
2 голосов
/ 27 апреля 2019

Я просто пытаюсь выполнить задание в Squeak (Smalltalk), и я не могу понять, как создать матрицу с определенным количеством строк и столбцов.

Я знаю, что можно создать матрицу 3х3 с чем-то вроде A := Matrix new:3., но мне нужно что-то вроде матрицы 3х2.Системный браузер не сильно помогает моему пониманию того, как это сделать, и я некоторое время искал в Интернете и не нашел ничего, что могло бы помочь.Кто-нибудь может привести пример строки кода о том, как создать что-то вроде матрицы 3х2?

Ответы [ 2 ]

5 голосов
/ 27 апреля 2019

Что вы должны понять, так это то, как 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.

2 голосов
/ 27 апреля 2019

Теперь у меня есть решение для всех, кто когда-либо задумывался о том, как это сделать.* var := Matrix rows: A columns: B. - создать матрицу (A x B), где A и B - целые числа.

...