Hello list,
I'm starting for a couple of days with smalltalk/squeak - maybe it's not my
last post :)
I like to construct a flat array, but get a nested array:
#(1 2 (1 + 3)) "unexpected result: #(1 2 #(1 #+ 3)) "
Why squeak means, that "(1 + 3)" is an array and not 4?
The syntax for an array literal is defined via"#(" - isn't it?
salute
Thomas
Is because the #(..) array is a literal build at compile time.
If you want a flat array use the {} syntax.
But this is specific to Squeak. You will not find it in VW for example.
Rather prefer the Array class>>#with:with:with:
The #() syntax is for a regular array but for a literal array you want {}
(curly braces)
Try this: {1. 2. 1 + 3.}
Hope that helps,
Ron Teitelbaum
Ah, thanks a lot, but this provokes my next question:
How can I use floats like 3.14 in an array literal?
{3.14 2.} "{3.14 Period or right brace expected ->2.}"
PS: Is there anywhere in the net a *COMPLETE AND COMPACT* list
of all "cryptical" syntax characteristics for smalltalk/squeak?
salute
Thomas
try this:
{3.14. 2}
Math
Thanks!
I recapitulate:
In {} Array literals I have to use a period sign between all items.
In #(..) array literal which build at compile time, I can never use
expressions.
Right?
salute
Thomas
Mathieu,
No,
With the brace syntax you separate STATEMENTS (hence the period) with a whitespace (tab newline etc... just as one
would with arrays). Expressions do not require a period.
So, { (3.14 asFloat). 2.} or { (3.14). 2. }
and just as well { (Stream on: ( String new:1204)). 'or whatever you can get away with...' .} (notice the periods
inside the literal string)
Olivier
Hahah! That's pretty funny. I hadn't thought about {3.14 2.} but I went
and tried it and guess what, it worked! My guess is the space is
importation.
I know that there are a number of tutorials,
http://wiki.squeak.org/squeak/792 if you find something good feel free to
let us know.
Ron Teitelbaum
Comments (0)
You don't have permission to comment on this page.