2009-06-19 6 views
1

Я прошел через (используя Squeak) Discovering Better Code: Bowling for Smalltalk Series от Ron Jeffries, и я не могу пройти через статью third.Инициализировать объект с помощью массива

Создается новый класс (называемый 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. 

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

alt text http://files.getdropbox.com/u/120566/junk/error.png

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

ответ

3

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

0

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

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

Смежные вопросы