lua-users home
lua-l archive

Re: Short form for defining a function (Was: try-catch ...)

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On 05/31/2016 04:33 PM, Dirk Laurie wrote:
2016年05月31日 14:42 GMT+02:00 steve donovan <steve.j.donovan@gmail.com>:
On Tue, May 31, 2016 at 2:37 PM, Alexey Melnichuk
<alexeymelnichuck@gmail.com> wrote:
May think about short from to define function.
Believe me, I tried ;) Such proposals have never flown far.
Maybe because this is already available, though not standardized.
The following code runs on Lua 5.1, Lua 5.2, Lua 5.3 and LuaJIT 2.0.
getmetatable"".__pow =
 function(args,result)
 return (loadstring or load)("local "..args.."=...; return "..result)
 end
print (("x,y,z" ^ "(x-y)/z, (x+y)/z")(3,4,5)) --> -0.2 1.4
The only restriction is that tonumber(args) and tonumber(result)
must be nil. This is no problem for args and can be circumvented
easily for result, e.g. "x,y" ^ "(1)".
In Lua 5.3, I prefer to use other metamethods to allow for default
arguments with the same look.
getmetatable"".__bxor =
 function(args,result)
 return (loadstring or load)("local "..args.."=...; return "..result)
 end
getmetatable"".__bnot =
 function(result)
 return load("local x,y,z=...; return "..result)
 end
(~"x+y,-x+y")(3,5) --> 8 2
That means you need to parse the function every time you run it, doesn't it? Also you can't access upvalues from your function.
--
Thomas

AltStyle によって変換されたページ (->オリジナル) /