【问题标题】:Lua require not workingLua要求不工作
【发布时间】:2017-11-16 07:51:43
【问题描述】:

我正在尝试使一个 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

预期的输出应该是

Hello Baz!
Hello Bar!
Hello Foo!

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

【问题讨论】:

  • 我尝试了一个备用 main.lua: local baz = module("BazModule", package.seeall) baz.Baz() local bar = module("Bar.BarModule", package.seeall) bar .Bar() local foo = module("Foo.FooModule", package.seeall) foo.Foo() ==== 这产生了这个不起作用的替代错误输出:==== C:\Users\TestUser \Desktop\LuaTest>lua main.lua lua: main.lua:4: 尝试索引本地 'baz' (一个 nil 值) 堆栈回溯: main.lua:4: in main chunk [C]: ?
  • 下次谷歌“找不到lua模块”

标签: lua


【解决方案1】:

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'

表示require 搜索的路径。package.path 似乎完全为空,或者其中可能存在一个格式错误的路径模式。 (应该是C:\dev\LuaDist\bin。)

way the search for a module foo.bar works?foo/bar(或foo\bar - 取决于操作系统)替换,因此./?.lua 会找到./foo/bar.lua

因此,解决此问题的方法是 (a) 修复您(或您安装的东西)正在/正在破坏 package.pathvia environment variable, startup script,...?)和/或 (b) 添加当前目录到搜索路径。

【讨论】:

  • 这似乎是有用的信息,但我比这更愚蠢。我从未故意设置或更改我的 package.path。如何将其重置为默认值?
  • 好吧,没关系,我明白了。我定义了一个名为 LUA_PATH 的环境变量,然后我将它作为 %LUA_PATH% 添加到我的 Windows PATH 变量中,以让 lua.exe 在 cmd 的任何位置运行。我没有意识到这会改变 lua 的行为。我需要重命名变量。谢谢!!!
  • 我可以确认将 LUA_PATH 重命名为 LUA_EXE_PATH 解决了我的问题。谢谢!
猜你喜欢
  • 2011-10-17
  • 2012-04-24
  • 1970-01-01
  • 2023-03-06
  • 2011-09-01
  • 2014-12-21
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多