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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top