Inicializar un objeto con una matriz
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?
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.