Inicializar um objecto com uma matriz
Pergunta
Eu estava passando por (usando Squeak) Discovering Código Melhor: Bowling for Smalltalk Series por Ron Jeffries e eu não posso conseguir passar através do artigo terceiro .
Uma nova classe (chamado Frame) está sendo criado que leva uma matriz como um argumento no construtor.
Frame class>>new: anArray
^self new setRolls: anArray
Frame>>setRolls: anArray
rolls := anArray
Quando tento executar este em um teste simples:
testFrame
| frame rolls |
rolls := Array with: 5 with: 4.
frame := Frame new: rolls.
Eu recebo o seguinte erro:
alt texto http://files.getdropbox.com/u/120566 /junk/error.png
Como devo modificar a mensagem #new para ser capaz de inicializar o objeto Quadro com um array?
Solução
Eu acho que você não adicionar o novo método: corretamente a classe Frame. Tem certeza de que colocá-lo no lado da classe (classe Frame) e não no lado da instância (Frame)? Para fazer isso, clique no botão 'classe', antes de acrescentar o seu novo método:.
Outras dicas
Você realmente não deseja substituir new:
aqui. new:
é tradicionalmente reservado para "Criar um item deste tamanho inteiro", e isso não me surpreende que ele está explodindo em você.
Um nome mais tradicional para o tipo de construtor você quer é fromArray:
, ou talvez até mesmo fromCollection:
que provavelmente teria trabalhado como você desejou.