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