[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Changing syntax
- From: Gunnar Zötl <gz@...>
- Date: Thu, 12 Feb 2004 17:05:44 +0100
Hi there,
something like this might do it for a C-style case statement (taking
advantage of luas first class functions):
function case(item)
return function(array)
if array[item] then
return array[item](item)
elseif array['default'] then
return array['default'](item)
else
return nil
end
end
end
-- try
for _,v in {'y', 1, 2} do
print("Testing "..tostring(v))
case(v) {
x = function () print "-> case was x" end,
y = function () print "-> case was y" end,
z = function () print "-> case was z" end,
[1] = function () print "-> case was 1" end,
default = function (x) print ("-> uncaught value: " .. tostring(x)) end
}
end
should be reasonably fast, too.
HTH,
Gunnar
ac> Hi,
ac> As far as I can tell, Lua evaluates arguments to functions eagerly. Is
ac> there any way of treating blocks of code lazily?
ac> For example, if I want to add a "case" statement to Lua that looks
ac> something like:
ac> case x
ac> of 1 do ... end
ac> of 2 do ... end
ac> else do ... end
ac> would I be able to? My initial idea was to define case as a vararg
ac> function, but if arguments are evaluated eagerly then this won't work (I
ac> believe).
ac> The syntax in the example above isn't important - what I'm looking for is
ac> a way of handling sections of code as first class objects, and for them
ac> not to be evaluated when passed as arguments, I think.
ac> Cheers,
ac> Andrew