Lua-C级别太多(限制为200)

Lua-C级别太多(限制为200),lua,Lua,我最近遇到了一个问题,我看到了错误“C级别太多(限制为200)” 这到底意味着什么?我怎样才能防止它发生 我认为这与循环要求有关,但它指向代码中创建类的新实例的一行,如下所示: Class:new() Class.SubClass = Class:new() 至于我的模块,我确实有一些循环要求,但我试图通过将外部类移动到同一个模块中来修复它们,如下所示: Class:new() Class.SubClass = Class:new() 有什么想法吗 更新: 下面是我遇到的一个例子: 类l

我最近遇到了一个问题,我看到了错误“C级别太多(限制为200)”

这到底意味着什么?我怎样才能防止它发生

我认为这与循环要求有关,但它指向代码中创建类的新实例的一行,如下所示:

Class:new()
Class.SubClass = Class:new()
至于我的模块,我确实有一些循环要求,但我试图通过将外部类移动到同一个模块中来修复它们,如下所示:

Class:new()
Class.SubClass = Class:new()
有什么想法吗

更新:

下面是我遇到的一个例子:

类lua

local Class = {}

function Class:new(o)
    o = o or {}
    setmetatable(o, self)
    self.__index = self
    return o
end

return Class
classes/Entity.lua

local Class = require('Class')
local Player = require('classes/Player')

local Entity = Class:new()

function Entity:getPlayer() 
    return Player:new() 
end

return Entity
classes/Player.lua

local Class = require('Class')
local Entity = require('classes/Entity')

local Player = Class:new()

function Player:getEntities() 
    local entities = {}
    for i = 1, 100 do
        entities[i] = Entity:new()
    end
    return entities
end

return Player

我意识到这是一个循环依赖,但我找到的唯一解决方案是:,它使用全局变量。有没有办法避免与当地人发生这种情况?

没有看到您的代码,请不要思考。元方法可能会调用自身。在元方法内部使用
rawget
rawset
\uuuu index
\uuuu newindex
。考虑到它在堆栈跟踪中指向的位置,这会很有意义。我将做一些挖掘。删除行
localplayer=require('classes/Player')
并将
returnplayer:new()
替换为
returnrequire('classes.Player'):new()
Yes。现在您还有一个函数调用。调用Lua中的任何函数都是一项代价高昂的操作。请声明
本地播放器
,但不要初始化它。当您需要此值时:
如果不是Player,则Player=require('classes/Player')结束
或使用来自