[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: still about switch..
- From: Rici Lake <lua@...>
- Date: Tue, 7 Sep 2004 16:06:19 -0500
On 7-Sep-04, at 3:45 PM, Eric Tetz wrote:
Asko Kauppi wrote:
What do you think, or should I just shut up? :)
I've always thought it would be nice to have some syntatical sugar for
a closure, especially where there are no parameters.
In a way, it is unfortunate that the same keyword is used both for
function statements and for function constructors, although no
syntactic ambiguity arises. However, this does force the use of () to
indicate that the closure has no arguments. Moreover, it makes it more
complicated to allow the use of free-standing closures as
parenthesis-free arguments, although that is possibly not a good idea.
I don't think overloading "do" is great, either. Do (at least in
English) implies a certain urgency; one would naturally expect the
chunk to be "done", rather than stored for later usage. Writing
closures as "function() ... end" is only slightly wordier.
If I had one syntactic sugar wish with respect to functions, it would
be to allow the use of
function [:]key(arg) ... end in a table constructor, so that one could
write, for example: (Quoting something I see in front of me)
function Memoise(fn)
return withmeta {
function :__index(key)
if key then
local rv = fn(key); self[key] = rv; return rv
end
end,
function :__call(key)
local rv, err = rawget(self, key)
if rv == nil then
rv, err = fn(key)
self[key] = rv
end
return rv, err
end
}
end
rather than the somewhat clumsier version with __index = function(self,
key) ...
Note:
function withmeta(meta) return setmetatable({}, meta) end
purely for syntactic convenience :)