Squeak

 

Array literals

Page history last edited by aikidave 2 yrs ago

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.