Возможно, вы не хотите этого делать.Я обычно использую производные Squeak и Array new: работает, но часто это не то, что вам нужно, потому что массивы имеют фиксированный размер (то есть вы не можете добавлять или удалять элементы), и поэтому вместо них обычно используется что-то вроде OrderedCollection.Кроме того, вы обычно не хотите хранить размер в ivar, а отправляете #size в свою коллекцию всякий раз, когда вам нужно узнать, сколько элементов в ней содержится.
Я изменил ваш пример кода на основеПриведенные выше предложения (также обратите внимание, что вам не нужно отправлять #initialize явно, это делается для вас через #new :):
Object subclass: Student [
| marks |
initialize [
marks := OrderedCollection new: 10.
].
addMark: newMark [
marks add: newMark
].
removeMarkAt: markIdx [
marks removeAt: markIdx
].
size [
^ marks size
]
]
student := Student new.
Если вам действительно нужно создать массив фиксированного размера, обновитевопрос, с каким вариантом Smalltalk вы используете, чтобы кто-то с конкретными знаниями о реализации мог помочь.Проблема, с которой вы, похоже, сталкиваетесь, заключается в том, что ваша реализация Smalltalk считает Array абстрактным классом, и поэтому вам нужно создать экземпляр его подкласса, чтобы получить массив фиксированного размера.