[Squeakland] Problem with scope of objects
Scott Wallace
scott.wallace at squeakland.org
Mon Nov 12 23:56:27 PST 2007
Hello Christian,
I think that perhaps the "tutorial" you were looking at might not be
the best way to get started with etoys.
First of all, to get a classic "Hello World" built in a Squeak
project, there's no need to open a Viewer, nor to create or run a
script. If you want a project which, when loaded, displays the text
"Hello World" (this is the classic definition of a "Hello World"
program, I believe,) you can simply obtain a fresh "text" object from
the supplies flap, then click to select the word "text" and then type
to replace its contents with the words "Hello World". If desired,
resize the text object using the yellow resize handle. Then save the
project, and you're done. This is not a programming task, but rather
simply a get-to-know-the-environment task.
If for some reason you're intent on using a tile script to set the
contents of the Text object, rather than simply directly editing the
contents as described above, you can indeed pursue the approach
suggested in that tutorial. However, the tutorial's instruction that
you click the checkbox in the Scriptor's header to change it from tile
mode to textual mode seems to be what's leading you astray here.
There's no reason to go to "textual mode" -- the task at hand is
easily accomplished staying in tile mode, by simply text-editing the
word "Text" to the right of the arrow in the script into the wording
"Hello World":
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pastedGraphic.tiff
Type: image/tiff
Size: 43278 bytes
Desc: not available
Url : http://squeakland.org/pipermail/squeakland/attachments/20071112/a0bf58b3/pastedGraphic-0001.tiff
-------------- next part --------------
Finally, I would guess that the problems you're having with object-
reference are because you are trying to refer to other objects by
typing their names into textual code in textual scripts. You should
really stick to tiles, particularly until you've mastered the basics
of tile scripting! In the case of the classic drive-a-car demo, when
you want "Car turn by 5" in a script to become "Car turn by Wheel's
heading", you open Wheel's Viewer, grab "Wheel's heading" tiles from
the Viewer, and drop them on the "5".
Also, you can use the orange "tile" handle in the halo of an object to
"tear off a tile" that refers to that object. Drop that tile onto any
reference tile anywhere in any script and it will replace that tile.
What you were trying to do was probably to type a textual script in
which you guessed at what the internal name used to refer to a
particular object might be -- but this is not a reliable approach,
since there is no restriction made on the format of external object
names, nor any requirement of uniqueness, with the result that Squeak
internally uses a regime of "internal names" which are syntactically
acceptable and unique, and there is no guarantee of correlation
between visible names and internal names.
So the bottom line is: use tile scripts rather than textual scripts.
Use drag-and-drop, rather than typing. All of the introductory etoys
materials that I'm aware of (other than the tutorial you ran across)
operate strictly with tiles. Textual scripting provides a great
"escape" which opens up the entire universe of Smalltalk programming
to the advancing user, but textual scripting certainly should play no
role in "Hello World", nor in "Drive a Car", nor in any other
introductory projects.
If this does not properly address your concerns, please ask further!
Cheers,
-- Scott
On Nov 12, 2007, at 8:50 PM, Christian Bode wrote:
> Hi,
>
> I am german cs student getting more and more amazed about squeak.
> Tonight I began to play around a bit and wanted to do that amazing
> "draw and steer your car" thing :)
>
> I used this tutorial to get started:
> http://www.dmu.com/squeak/sq0.html
>
> Well, unfortunately i could not figure out this simple thing in 3
> hours.
> My problem is, after having added the car "Speedy" to the world, I
> cannot
> reference to it from any other script. If I add a steerwheel to the
> world, and
> want attach a script to it, squeak is not able to resolve that
> reference. It will
> tell me that "Speedy" is undefined and ask me if I would like to
> declare
> it global or create it.
> I had this problem with all kinds of things; text fields, button
> etc. I could
> not manage to get the "Hello World", from the tutorial running
> (http://www.dmu.com/squeak/sq1.html).
>
> Did I get something wrong ? So before I loose interest I rather ask.
> I am
> puzzled because I did it exactly the way described in the tutorial.
>
> Thank you a lot!
> Frederick (That?s a nick, if you wonder :))
>
> _______________________________________________
> Squeakland mailing list
> Squeakland at squeakland.org
> http://squeakland.org/mailman/listinfo/squeakland
More information about the Squeakland
mailing list