You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua Lanes报‘Recursive use of upvalues’错误的原因探究

问题原因解析
  • 核心差异在于upvalue的引用类型与Lua Lanes的递归复制逻辑:
    1. 直接使用M.test时,M是M.laneFunc的upvalue。Lua Lanes创建子线程时,需要复制函数依赖的所有upvalue到新线程环境。M作为表,内部包含M.linda(Lanes的linda对象)和M.laneFunc本身,形成循环引用:M.laneFunc依赖M,M又包含M.laneFunc。Lanes递归复制该表时检测到这种循环依赖,抛出Recursive use of upvalues; cannot copy the function错误。
    2. 赋值给局部变量ts后,ts存储的是字符串"blabla"的直接副本,作为upvalue时只是简单基础类型,不涉及对M表的引用,不会触发递归复制的循环问题,因此能正常运行。

验证代码

local lanes = require "lanes"

local M = {}
M.linda = lanes.linda()
M.test = "blabla"
local ts = M.test

function M.laneFunc(linda, i, n)
    -- print(M.test .. "Starting thread "..i.." with "..n.." seconds wait") -- 触发错误
    print(ts .. "Starting thread "..i.." with "..n.." seconds wait") -- 正常运行
end

local function CreateLane()
    local thread = lanes.gen("*", M.laneFunc)
    return thread(M.linda, 1, 1)
end

local t = CreateLane()

return M

内容的提问来源于stack exchange,提问作者po.pe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 03:14:54