[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Blocks/Closures in Lua
- From: Steve Dekorte <steve@...>
- Date: Sun, 28 Dec 97 13:24:11 -0800
I'm having problems getting Lua to do something like Smalltalk/Self blocks.
As a simple example, in Self you can do something like:
myCollection do:[ :a | a > 24 ifTrue:a = a + 1]
which adds one to each element whose value is over 24.
The bit in []s is a "block" and is essentially a function that can be passed arround
as an argument.
In Lua, it might be something like this:
myCollection:do( function myBlock(self, a) if self.a > 24 then self.a = self.a + 1 end end )
or if 'a' is an object:
myCollection:do( function myBlock(a) if a:isGreaterThan(24) then a:increment() end end )
or if we use fallbacks on ">", "=" and "+" to map to "isGreaterThan", "setValue"
and "add" messages:
myCollection:do( function myBlock(a) if a > 24 then a = a + 1 end end )
But I get a syntax error when I try to declare a function within a function.
Is there any way around this syntax error problem?
Steve