相关疑难解决方法(0)

Lua:如何避免循环要求

问题

在尝试执行循环要求时,如何避免Lua 5.1的以下错误?

$ lua main.lua 
lua: ./bar.lua:1: loop or previous error loading module 'foo'
stack traceback:
    [C]: in function 'require'
    ./bar.lua:1: in main chunk
    [C]: in function 'require'
    ./foo.lua:1: in main chunk
    [C]: in function 'require'
    main.lua:1: in main chunk
    [C]: ?
Run Code Online (Sandbox Code Playgroud)

文件结构

main.lua

require "foo"
require "bar"
print (Foo.getName())
print (Bar.getName())
Run Code Online (Sandbox Code Playgroud)

foo.lua

require 'bar'
Foo = {}
Foo.name = 'foo'

function Foo:getName()
    return Foo.name .. Bar.name
end
Run Code Online (Sandbox Code Playgroud)

bar.lua

require 'foo'
Bar = {}
Bar.name = 'bar'

function Bar:getName() …
Run Code Online (Sandbox Code Playgroud)

lua circular-dependency

9
推荐指数
2
解决办法
8313
查看次数

Lua - 我如何使用另一个lib?

我在另一个内部使用一个Lua lib时遇到了麻烦.我不确定最好的方法.

我有一个库,它返回一个带有函数的(非全局)表,如下所示:

-- foo.lua
local foo = {}
function foo:m1(...) ... end
function foo:m2(...) ... end
return foo
Run Code Online (Sandbox Code Playgroud)

可以将此库插入全局或本地范围,具体取决于用户的需求:

-- globally
foo = require('foo')
-- or locally
local foo = require('foo')
Run Code Online (Sandbox Code Playgroud)

我现在正在尝试创建另一个bar需要/使用此foolib的库(让我们称之为).像这样的东西:

-- bar.lua
local bar={}
function bar:m3(...)
  ...
  foo:m1()
  ...
end
Run Code Online (Sandbox Code Playgroud)

我的问题是-我不知道如何"传递" foobar.

理想情况下,我想将其作为参数发送到require:

local foo = require('foo')
local bar = require('bar', foo)
Run Code Online (Sandbox Code Playgroud)

但我不认为这是可能的(是吗?).我能想到的另一个选择是添加一个init方法bar:

local foo = require('foo')
local bar = require('bar')
bar:init(foo)
Run Code Online (Sandbox Code Playgroud)

这有效,但对我来说看起来不太干净; 有可能忘记添加第三行, …

lua module

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

标签 统计

lua ×2

circular-dependency ×1

module ×1