A stupid newbie question

Phil Weichert weichert at hal-pc.org
Sun Oct 7 16:10:25 UTC 2001


Patrick,
  You are getting a lot of help on this but I would like to add my two cents
worth.  The result of
aPoint := FillInTheBlank
        request: 'Next move?'
        initialAnswer: '1 at 1'.

is not a point.  The temporary variable, aPoint, is a string.  Remember that the
object paridigm is a message is sent to an object and the result (what is
returned) is always.  So, if at this juncture aPoint is a String what options in
the standard image are available to convert a string to a point.  This is not
obvious but the simplest and most portable solution is:
aPoint := Point readFrom: (aPoint readStream).

The parathesis are unnecessary but added to emphasize the conversion from
aString to aStream.  Now aPoint will be an instance of Point.  Putting it
altogether you get:
aPoint := Point readFrom: (FillInTheBlank
                                            request: 'Next move?'
                                            initialAnswer: '1 at 1' ) readStream.
Phil

Patrick Castle wrote:

> Hi all,
>
> I'm having a particular problem which is probably laughably stupid and
> although I managed a workaround the whole implementation is looking really
> sloppy.
>
> I'm trying to implement an example from the book: 'Discovering Smalltalk' -
> the TicTacToeGame if anyone is interested.
>
> Now I know some of the code won't work as it isn't written for Squeak. I
> have translated it as best I can and have actually managed to implement a
> full solution.
>
> However.....
>
> The idea is to prompt the user for a simple point on a 3x3 grid meaning:
> answer isKindOf: Point.
> But when implementing..
>
> |aPoint|
>
> aPoint := FillInTheBlank
>         request: 'Next move?'
>         initialAnswer: '1 at 1'.
>
> ..a String is bound to the aPoint variable.
>
> As part of the move's validation process a method is used to determine
> firstly whether the user has actually entered a point and secondly whether
> the point is valid. But it won't even pass the    aPoint isKindOf: Point
> test.
>
> Now feel free to laugh out loud at my workaround, but this is how I turned
> achieved the desired result:
>
> |aPoint|
>
> aPoint := FillInTheBlank
>         request: 'Next move?'
>         initialAnswer: '1 at 1'.
> aPoint := Point x: ((aPoint at: 1) asInteger - 48) y: ((aPoint at: 3)
> asInteger - 48).
>
> This binds a Point instance to aPoint which is the desired outcome. However,
> I don't personally think the workaround is very acceptable. For a start I
> could enter 'Johnny Rotten' and the application would happily convert my
> answer into a Point instance which I think is very sloppy. I would need an
> extra layer of validation to stop this. Mind you - any string other than the
> legal values for the game will come up with an 'illegal move' response (or
> at least they seem to).
>
> So my question is how to a turn a String response '1 at 1' into Point instance
> 1 at 1? And it actually opens up a larger question for me. Using
> FillInTheBlank, how to I return anything other than String objects? From my
> example it seems that if I had used the class to prompt me for a number I
> would be return '5' rather than 5, which isn't much use if I'm wanting to
> make calculations with the answer.
>
> I know the answer would have to be very simple, but I just haven't found the
> solution in the class library yet, or any tutorials or books I have.
>
> Just to try your patience I thought I'd add another question.
>
> Now that I have the application functioning I would like to make it into an
> .exe file to see how it functions outside of the Squeak development
> environment. The only info I've found so far on doing this is to type:
>
> CCodeGenerator new initialize addClass: ClassName) codeString.
>
> Inspecting this gives me some C code with an #include 'sq.h'  line in it. I
> don't have this header file so where would I get it? Is this all I need to
> do to turn a Squeak application into an .exe?
>
> I'm presuming I would have to do this with all Classes I create to make the
> application plus any other pre-existing Classes I have modified or created
> that happen to be used within the application.
>
> I have a GNU C/C++ compiler so I'm guessing that should be enough for
> compilation.
>
> Thanks for perservering.
>
> Regards
> Patrick





More information about the Squeak-dev mailing list