就像一个随机实验一样,我正在考虑向元表添加一个__concat()
元方法number
(通常是一个新的元表,因为数字似乎默认没有元表?)。
这个想法是我可以做类似的事情3..5
然后回来3, 4, 5
。
然后我可以有一个函数foo(tbl, ...)
,它对表上的多个索引执行某些操作,并将其称为foo(tbl, 3..5)
.
我是在狂吠还是这样做似乎可行?
代码草稿(尚未测试):
-- get existing metatable if there is one
local m = getmetatable( 0 ) or {};
-- define our concat method
m.__concat = function( left, right )
-- note: lua may pre-coerce numbers to strings?
-- http://lua-users.org/lists/lua-l/2006-12/msg00482.html
local l, r = tonumber(left), tonumber(right);
if not l or not r then -- string concat
return tostring(left)..tostring(right);
else -- create number range
if l > r then l, r = r, l end; -- smallest num first?
local t = {};
for i = l, r do t[#t+1] = i end;
return (table.unpack or unpack)(t);
end
end
-- set the metatable
setmetatable( 0, m );
附加问题:我有什么方法可以...
按值填充值(以消除上面示例中对表格和解包的需要)?