Lua 需要不工作

Pau*_*ore 6 lua

我试图让一个 lua 文件需要另一个。我正在遵循本指南:http : //lua-users.org/wiki/ModulesTutorial

我的基本测试,应该是一个微不足道的 hello world,不起作用,我不知道为什么。

这是一个显示所有文件和所有错误的控制台日志:

C:\Users\TestUser\Desktop\LuaTest>dir
 Volume in drive C has no label.
 Volume Serial Number is XXXX-XXXX

 Directory of C:\Users\TestUser\Desktop\LuaTest

11/15/2017  03:03 PM    <DIR>          .
11/15/2017  03:03 PM    <DIR>          ..
11/15/2017  02:53 PM    <DIR>          Bar
11/15/2017  03:04 PM                92 BazModule.lua
11/15/2017  02:53 PM    <DIR>          Foo
11/15/2017  03:08 PM               139 main.lua
               2 File(s)            231 bytes
               4 Dir(s)  253,774,073,856 bytes free

C:\Users\TestUser\Desktop\LuaTest>lua main.lua
lua: main.lua:1: module 'BazModule' not found:
        no field package.preload['BazModule']
        no file 'C:\dev\LuaDist\bin'
        no file '.\BazModule.dll'
        no file 'C:\dev\LuaDist\bin\..\lib\lua\BazModule.dll'
        no file 'C:\dev\LuaDist\bin\..\lib\lua\loadall.dll'
stack traceback:
        [C]: in function 'require'
        main.lua:1: in main chunk
        [C]: ?

C:\Users\TestUser\Desktop\LuaTest>type main.lua
local baz = require("BazModule")
baz.Baz()

local bar = require("Bar.BarModule")
bar.Bar()

local foo = require("Foo.FooModule")
foo.Foo()

C:\Users\TestUser\Desktop\LuaTest>type BazModule.lua
local BazModule = {}

function BazModule.Baz()
    print("Hello Baz!")
end

return BazModule

C:\Users\TestUser\Desktop\LuaTest>lua -v
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
Run Code Online (Sandbox Code Playgroud)

预期的输出应该是

Hello Baz!
Hello Bar!
Hello Foo!
Run Code Online (Sandbox Code Playgroud)

但它找不到与 main.lua 相邻的任何文件,我不明白为什么。

nob*_*ody 6

requirepackage.path(对于 Lua 文件)和package.cpath(对于已编译的库)中列出的目录中搜索。

您的错误信息...

lua: main.lua:1: module 'BazModule' not found:
        no field package.preload['BazModule']
        no file 'C:\dev\LuaDist\bin'
        no file '.\BazModule.dll'
        no file 'C:\dev\LuaDist\bin\..\lib\lua\BazModule.dll'
        no file 'C:\dev\LuaDist\bin\..\lib\lua\loadall.dll'
Run Code Online (Sandbox Code Playgroud)

表示require搜索到的路径。似乎package.path完全空的,或者那里可能有一个格式错误的路径模式。(这将是C:\dev\LuaDist\bin。)

一个模块的搜索方式foo.bar的工作原理?通过取代foo/bar(或foo\bar-取决于OS)等./?.lua会发现./foo/bar.lua

所以解决这个问题的方法是(a)修复你(或你安装的东西)正在/正在破坏package.path通过环境变量,启动脚本,......?)和/或(b)将当前目录添加到搜索路径。

  • 我可以确认将 LUA_PATH 重命名为 LUA_EXE_PATH 修复了我的问题。谢谢! (2认同)