Инициализировать объект с массивом - PullRequest
1 голос
/ 19 июня 2009

Я проходил (используя Squeak) Обнаружение лучшего кода: боулинг для серии Smalltalk Рона Джеффриса, и я не могу пройти через статью третью .

Создается новый класс (называемый Frame), который принимает массив в качестве аргумента в конструкторе.

Frame class>>new: anArray
  ^self new setRolls: anArray

Frame>>setRolls: anArray
  rolls := anArray

Когда я пытаюсь запустить это в простом тесте:

testFrame
  | frame rolls |
  rolls := Array with: 5 with: 4.
  frame := Frame new: rolls.

Я получаю следующую ошибку:

альтернативный текст http://files.getdropbox.com/u/120566/junk/error.png

Как мне изменить сообщение #new, чтобы иметь возможность инициализировать объект Frame массивом?

Ответы [ 2 ]

3 голосов
/ 19 июня 2009

Полагаю, вам не удалось добавить метод new: правильно в класс Frame. Вы уверены, что поместили его на стороне класса (класс Frame), а не на стороне экземпляра (Frame)? Чтобы сделать это, нажмите на кнопку «класс», прежде чем добавить свой метод new:.

0 голосов
/ 24 июня 2009

Вы действительно не хотите переопределять new: здесь. new: традиционно зарезервирован для «Создание предмета этого целого размера», и меня не удивляет, что он взрывается на вас.

Более традиционное имя для типа конструктора, который вы хотите, это fromArray:, или, возможно, даже fromCollection:, который, вероятно, работал бы так, как вы хотели.

...