[haXe] blocks and yield?

blackdog blackdog at ipowerhouse.com
Sat Apr 7 15:52:11 CEST 2007


On Sat, 07 Apr 2007 10:10:25 +0200
Nicolas Cannasse <ncannasse at motion-twin.com> wrote:

> > java doesn't have a yield in the vm either (as far as i know), but
> > groovy does it like this
> > 
> > public method(int x,Closure c)  {
> > // snip
> >  	c.call(myparam);
> > // snip
> > }
> > 
> > called with
> > 
> > obj.method(1) { p ->
> > 	println p
> > }
> > 
> > OR
> > 
> > obj.method(1,{p-> println p})
> 
> This is only a "local" yield, so less powerful, since you can't escape
> the scope of the Closure.
> 
> It can be done currently in haXe :
> 
> public function method( x, f ) {
> // snip
>     f(456);
> // snip
> }
> 
> obj.method(1,function(p) { trace(p); });
> 
> So your proposal is mainly about having another syntax of function
> parameters, which would save only a few chars (the 'function'
> keyword). I'm not sure then it's worth adding a specific syntax for
> that.
> 
> Nicolas
> 
> 

Hi Nicolas

Yes, it's only syntactic sugar as i mentioned. Disclaimer, I'm not a
language lawyer :), but I use groovy for my server side stuff and,
subjectively, the removal of the function definition is very welcome,
it's cleaner and easier to read - and i think the groovy model proves
that this is a useful workable tweak.

Also, when I was learning ruby (and later groovy) my understanding of
anonymous functions improved because of the ease of using this language
construct. I tend to program more functionally in groovy cos it's
clean, when i program functionally in javascript it gets messy - using
the lambda module would be much nicer with this construct.

Also if a client syntax could be agreed upon, then later in the
evolution of the haxe language deeper mechanisms could be added like a
non-local yield (whatever that is :)) , i.e. when you were ready you
could do it properly. However, this method could be implemented in the
other platforms haxe supports now.

Anyone else got any comments on this ?

On a side topic, I mentioned DSLs and builder functionality, but this
depends on way to intercept and re-route a called method that doesn't
exist on an object, which i guess is difficult with haxes typing - is
this possible at all ?

Thanks 

bd




More information about the Haxe mailing list