[Newbies] Total newb...
mm3 at zepler.net
Tue Oct 14 15:56:33 UTC 2008
For C programmers, another way to look at blocks is that it is like passing
a function pointer, except that instead of specifying the address of a
function that you wrote elsewhere, you just write the text of the function.
On 10/14/08, Ron Teitelbaum <Ron at usmedrec.com> wrote:
> Hi Tony,
> You stumbled on one of the most powerful features of Smalltalk. The Block
> (See BlockContext). Blocks are a contextual memory space. They can be
> passed around and do all sorts of great things that Smalltalk programmers
> take for granted.
> The basic form is  this is a no argument, no code block. Pretty boring
> cause it does nothing.
> A more advanced form is ['hello'] which is a block with a literal string.
> Still pretty boring. But at least you can get the string out of the block
> by aBlock := ['hello']. ^aBlock value.
> A bit more advanced: [:arg | 'Hello ', arg] has an argument.
> Now you can do ^aBlock value: 'Ron'.
> You can have more arguments [:arg1 :arg2 | 'Hello ', arg1, ' ', arg2].
> Now you can do ^aBlock value: self firstName value: self lastName.
> Even more complicated is:
> | isLoggedIn |
> isLoggedIn := true.
> [:arg | 'Hello ', arg, ' you are ', (isLoggedIn ifTrue: [''] ifFalse: ['
> not']), ' logged in']
> Now you can do ^aBlock value: 'Ron'. From anywhere and the block remembers
> the context from where it was created. Pretty cool huh.
> The regular select uses a block too:
> self select: [:anItem | anItem isBlue]
> which uses a do that uses a block
> self do: [:anElement |
> aBlock value: anElement) ifTrue ...
> Blocks are certainly a good thing to learn.
> Happy Coding,
> Ron Teitelbaum
> > -----Original Message-----
> > From: beginners-bounces at lists.squeakfoundation.org [mailto:beginners-
> > bounces at lists.squeakfoundation.org] On Behalf Of Tony Giaccone
> > Sent: Tuesday, October 14, 2008 2:12 AM
> > To: beginners at lists.squeakfoundation.org
> > Subject: [Newbies] Total newb...
> > Ok, so I'm really new to smalltalk. I've done a few basic tutorials
> > and have a simple understanding of the syntax. My pervious programing
> > experience is mostly java/C with a bit of Objective C in the mix.
> > I'm trying to figure out how to do what seems like a simple thing.
> > I have a set, I'd like to find out if an object exists in the set.
> > In a general form. Let's use the a relatively simple case.
> > Assume I have classes Rock Paper and Scissors.
> > validHands := Set new.
> > validHands add: Rock new; add Paper new; add Scissors new.
> > Assume I have a player object which responds to the method
> > throwsAHand with an instance of Rock Paper or Scissors.
> > how do I craft
> > validHands contains: aPlayer throwsAHand
> > I know that contains: takes a block, and that this isn't correctly
> > done.. but I'm trying to get the a handle on how to do this.
> > The intent is to return a boolean, that indicates if the object the
> > player threw is in the Set of valid objects that can be thrown.
> > Tony
> > _______________________________________________
> > Beginners mailing list
> > Beginners at lists.squeakfoundation.org
> > http://lists.squeakfoundation.org/mailman/listinfo/beginners
> Beginners mailing list
> Beginners at lists.squeakfoundation.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Beginners