2011/11/8 Eliot Miranda <[email protected]>:
>
>
> On Mon, Nov 7, 2011 at 3:21 PM, Markus Rother <[email protected]>
> wrote:
>>
>> On 11/07/2011 11:08 PM, Stéphane Ducasse wrote:
>>
>> The issue I could not solve on my own is this:
>> I would like to instantiate from symbols. My use-case is a collection of
>> class names which I want to ask to return one instance each.
>>
>> why are you trying to do?
>> because symbols are not done to be instantiated like that.
>>
>> aString asSymbol is instantiating symbols for you.
>>
>> Stef
>>
>> Thanks everybody for the kind, plenty and swift replies.
>>
>> Here is what I was up to:
>>
>> ChessBoard class>>newGame
>> | newBoard |
>> ...
>> firstRow := #(Rook Knight Bishop Queen King Bishop Knight Rook).
>>     1 to: 8 do: [ :col |
>>         (newBoard at: 1 at: col) putFigure: (firstRow at: col) asClass
>> newWhite
>>         ].
>> ...
>>
>> Symbol>>asClass
>>     ^(Smalltalk classNamed: self)
>>
>> I don't see how a string representation would have helped me here...?
>> Although, I am a noob, my intuition tells me that symbols are absolutely
>> fine, here - especially considering they are used precisely for that purpose
>> internally.
>
> But so is
>
> ChessBoard class>>newGame
>     | newBoard |
>     ...
>     firstRow := {Rook. Knight. Bishop. Queen. King. Bishop. Knight. Rook}.
>     1 to: 8 do: [ :col |
>         (newBoard at: 1 at: col) putFigure: (firstRow at: col) newWhite
>         ].
> ...
> as could be
>     newBoard
>         at: 1 put: ({Rook. Knight. Bishop. Queen. King. Bishop. Knight.
> Rook} collect: [:class| class newWhite];
>         at: 2 put: (1 to: 8) collect: [:ign| Pawn newWhite];
>         atAll: (3 to: 6) put: (Array new: 8);

Then avoid statefull operations like
    ((board at; i) at: j) put: move.
because you just shared some rows.

;)

Nicolas

>         at: 7 put: (1 to: 8) collect: [:ign| Pawn newBlack];
>         at: 8 put: ({Rook. Knight. Bishop. Queen. King. Bishop. Knight.
> Rook} collect: [:class| class newBlack]
>>
>> Greets,
>> Markus
>
>
>
> --
> best,
> Eliot
>

Reply via email to