lua 怎么处理两个闭包公用同一个upvalue

 我来答
匿名用户
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())
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式