Pregunta

Estaba pasando (usando Squeak) la Descubriendo un mejor código: Bowling para la serie Smalltalk por Ron Jeffries y no puedo pasar por el tercer artículo.

Se está creando una nueva clase (llamada Frame) que toma una matriz como argumento en el constructor.

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

Frame>>setRolls: anArray
  rolls := anArray

Cuando intento ejecutar esto en una prueba simple:

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

Me sale el siguiente error:

texto alternativo http://files.getdropbox.com/u/120566 /junk/error.png

¿Cómo debo modificar el mensaje #new para poder inicializar el objeto Frame con una matriz?

¿Fue útil?

Solución

Supongo que fallaste al agregar el método new: correctamente a la clase Frame. ¿Estás seguro de que lo pones en el lado de la clase (clase Frame) y no en el lado de la instancia (Frame)? Para hacerlo, haga clic en el botón 'clase', antes de agregar su método new :.

Otros consejos

Realmente no desea anular new: aquí. new: está tradicionalmente reservado para " Crear un elemento de este tamaño entero " ;, y no me sorprende que te explote.

Un nombre más tradicional para el tipo de constructor que desea es fromArray: , o tal vez incluso fromCollection: que probablemente habría funcionado como deseaba.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top