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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top