Вопрос

Я проходил (используя 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 массивом?

Это было полезно?

Решение

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top