Inizializza un oggetto con un array
Domanda
Stavo attraversando (usando Squeak) il Alla scoperta di un codice migliore: bowling per le serie Smalltalk di Ron Jeffries e non riesco a leggere l'articolo terzo .
Viene creata una nuova classe (chiamata Frame) che accetta un array come argomento nel costruttore.
Frame class>>new: anArray
^self new setRolls: anArray
Frame>>setRolls: anArray
rolls := anArray
Quando provo ad eseguirlo in un semplice test:
testFrame
| frame rolls |
rolls := Array with: 5 with: 4.
frame := Frame new: rolls.
Ottengo il seguente errore:
alt text http://files.getdropbox.com/u/120566 /junk/error.png
Come devo modificare il messaggio #new per poter inizializzare l'oggetto Frame con un array?
Soluzione
Suppongo che non sia stato possibile aggiungere il metodo new: correttamente alla classe Frame. Sei sicuro di metterlo sul lato della classe (classe Frame) e non sul lato dell'istanza (Frame)? Per farlo, fai clic sul pulsante 'class', prima di aggiungere il tuo metodo new :.
Altri suggerimenti
Non vuoi davvero sovrascrivere new:
qui. new:
è tradizionalmente riservato per " Crea un articolo di questa dimensione intera " ;, e non mi sorprende che ti stia esplodendo.
Un nome più tradizionale per il tipo di costruttore desiderato è fromArray:
o forse anche fromCollection:
che probabilmente avrebbe funzionato come desiderato.