lua 怎么处理两个闭包公用同一个upvalue
1个回答
2016-09-24
展开全部
作者:尼古拉斯奇凯
链接:http://www.zhihu.com/question/26159172/answer/32385871
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
function C1()
local a = 1
return function ( )
a = a+1
return a
end
end
local c = C1()
function copy_with_upv(func)
local func2 = func
local up_func2 = 1
function func2()
local _,orig = debug.getupvalue(func, 1)
debug.setupvalue(func, 1, up_func2)
local result = func()
_,up_func2 = debug.getupvalue(func, 1)
debug.setupvalue(func, 1, orig)
return result
end
return func2
end
local d = copy_with_upv(c)
local e = copy_with_upv(c)
print(c())
print(d())
print(e())
print(c())
print(d())
print(e())
链接:http://www.zhihu.com/question/26159172/answer/32385871
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
function C1()
local a = 1
return function ( )
a = a+1
return a
end
end
local c = C1()
function copy_with_upv(func)
local func2 = func
local up_func2 = 1
function func2()
local _,orig = debug.getupvalue(func, 1)
debug.setupvalue(func, 1, up_func2)
local result = func()
_,up_func2 = debug.getupvalue(func, 1)
debug.setupvalue(func, 1, orig)
return result
end
return func2
end
local d = copy_with_upv(c)
local e = copy_with_upv(c)
print(c())
print(d())
print(e())
print(c())
print(d())
print(e())
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询