相关疑难解决方法(0)

推荐的方法是在Lua 5.2中递归地相互引用2个以上的模块

有办法吗?

  • 两个Lua模块(让我们称他们为AB)
  • 每个模块使用另一个模块的功能,因此它们必须require相互配合
  • 第三个模块(让我们称之为C)可以使用A但不能使用Beg

C.lua:

local A = require 'A'

-- ...

A.foo()
Run Code Online (Sandbox Code Playgroud)
  • 可能有另一个模块D需要B但不需要A和/或E要求两个AB
  • 无论是A也不是B,也没有他们的成员应该被加入到全局命名空间.
  • 避免使用modulesetfenv函数(Lua 5.2中不推荐使用)

相关:Lua - 我如何使用另一个lib?(注意:此解决方案不处理循环依赖.)

lua module circular-dependency lua-5.2

6
推荐指数
1
解决办法
2327
查看次数

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

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

它到底意味着什么?我该如何防止这种情况发生?

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

Class:new()
Run Code Online (Sandbox Code Playgroud)

至于我的模块,我确实有一些循环需求,但我尝试通过将外部类移动到同一个模块中来修复它们,如下所示:

Class.SubClass = Class:new()
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

更新:

这是我遇到的一个例子:

lua类

local Class = {}

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

return Class
Run Code Online (Sandbox Code Playgroud)

类/Entity.lua

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

local Entity = Class:new()

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

return Entity
Run Code Online (Sandbox Code Playgroud)

类/Player.lua

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

local Player = Class:new()

function Player:getEntities() 
    local entities = {}
    for i = 1, 100 …
Run Code Online (Sandbox Code Playgroud)

lua dependencies require

6
推荐指数
1
解决办法
3223
查看次数