Re: Another example for syntactically lightweight closures
[
Date Prev][
Date Next][
Thread Prev][
Thread Next]
[
Date Index]
[
Thread Index]
- Subject: Re: Another example for syntactically lightweight closures
- From: Jean-Claude Wippler <jcw@...>
- Date: Wed, 6 Feb 2008 15:14:32 +0100
Er, perhaps I misunderstand your examples, but those look like
precisely
my case (1):
mydata:sort ( |a,b|(upcase (a) > upcase (b)) )
mydata:collect ( |x| (x.shoesize > x.age/2) )
Whoops, you're right, sorry :)
Hm... could something like "|a| ..." be made shorthand for
"function(a) return ... end"? (with the parentheses optional?)
Trouble is, it leads to "||" for argument-less closures, and it won't
extend nicely for the unwind_protect multi-line example that started
this thread.
Having said that, I like your "|a,b|(a + b)" and "|a|{ print (a) }".
The first one would be single-valued (fine with me). And arg-less
could then be "||{ print (123) }". Both of them could be used after
the closing parenthesis, so to get back to the original example, we'd
have:
unwind_protect( io.close, f ) || {
print( f:read( "*a" ) )
}
(or perhaps ":" i.s.o. "|", no idea whether that can fit in Lua's
syntax rules)
I sure hope someone finds a nice syntax for Lua, I expect something
like the above one-liners to be very useful. Ruby is full of examples
where closures simplify the notation - to the point where they become
second nature, in fact.
-jcw