Re: An Idea: Proxying
[
Date Prev][
Date Next][
Thread Prev][
Thread Next]
[
Date Index]
[
Thread Index]
- Subject: Re: An Idea: Proxying
- From: Griffin Rock <abcq2@...>
- Date: 2020年1月30日 02:15:27 +0000
> The purpose of this value is to encapsulate other values
> similar to using an empty table with setmetatable ...
> the proxied value is passed to metamethods instead of the proxy
the implementation is shorter than the suggestion, and doesn't require any changes to the core language, let alone a new type.
local proxied,metatable = {},{} -- symbols to prevent namespace conflict
local Proxy = {} -- class
loop(function (meta)
 Proxy[meta] = function (self, ...)
 local method = self[metatable][meta]
 if method then return method(self[proxied], ...); end
 end
end) "__call" "__add" "__sub" "__mul" -- etc
function envelop (p,m)
 return setmetatable({[proxied]=p, [metatable]=m}, Proxy)
end