在尝试执行循环要求时,如何避免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 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)
我的问题是-我不知道如何"传递" foo到bar.
理想情况下,我想将其作为参数发送到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)
这有效,但对我来说看起来不太干净; 有可能忘记添加第三行, …