A stupid newbie question

Torge Husfeldt jean-jacques.gelee at gmx.de
Sat Oct 6 22:18:47 UTC 2001


Hi Patrick,

As Dan already stated: there is no such thing as a stupid newbie
question.
Only opportunities for us to learn from people with a fresh point of
view...

I have attached a little changeset (with the suggestion from Dan) so you
can simply write:
aPoint asPoint
or:
Point readFromString: aPoint.

Please look at the method Point class>>fromUser and tell me if you were
able to make your implementation nicer with it?!!

squeak on,
Torge

P.S.: After I wrote this I read the message from John-Reed Maffeo and
now I feel rather like a fool (or a bloody newbie, greenhorn, beginner)
but I post this anyway for two reasons: 1 With my code included you
avoid the Compiler evaluate step (save your image and try:'Smalltalk
snapshot: false andQuit: true' as user input) 2 I'm still curious what
you make of Point>>fromUser.

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
-------------- next part --------------
'From Squeak3.0 of 4 February 2001 [latest update: #3552] on 7 October 2001 at 12:01:24 am'!

!Point class methodsFor: 'instance creation' stamp: 'th 10/6/2001 23:49'!
readFromString: aString
	| temp |
	"Point readFromString: '1 at 1'"
	temp _ Scanner new scanTokens: aString.
	({[temp isCollection].
	[temp size ==3].
	[temp second == #@].
	[temp first isNumber].
	[temp third isNumber]} allSatisfy:[:each | each value])
		ifTrue:[^self x: temp first y: temp third].
	^ nil! !


!String methodsFor: 'converting' stamp: 'th 10/7/2001 00:01'!
asPoint
	Point readFromString: self! !



More information about the Squeak-dev mailing list