【问题标题】:Module not found - “xxx module not found” - Lua lang未找到模块 - “未找到 xxx 模块” - Lua lang
【发布时间】:2020-09-28 21:48:24
【问题描述】:

如何才能使用这个模块?

文件:Player.lua,我的模块

     local Player = {}
     local function funcPlayer()

        local player = {}
        local self = {name="", points = 0}

        local setPoints = function(newPoints)
          self.points = newPoints
        end

        local getPoints = function ()
          return self.points
        end

        local setName = function(newName)
          self.name = newName
        end

        local getName = function()
          return self.name
        end

        local f__tostring = function()
          return "(" .. self.name .. ", " .. self.points .. ")"
        end

        setmetatable(player, {
          __tostring = f__tostring
        })

        player.getPoints = getPoints
        player.setPoints = setPoints
        player.getName = getName
        player.setName = setName

        return player
    end

    Player = funcPlayer()
    return Player

请求模块的文件:Players.lua

  local tabPlyer = require("Player")

错误信息:

[Running] lua "c:\Users\tct9\Documents\Lua\ScriptLua\Games\Players.lua"
lua: c:\Users\tct9\Documents\Lua\ScriptLua\Games\Players.lua:1: module 'Player' not found:
    no field package.preload['Player']
    no file 'c:\Users\tct9\Documents\Lua\lua\Player.lua'
    no file 'c:\Users\tct9\Documents\Lua\lua\Player\init.lua'
    no file 'c:\Users\tct9\Documents\Lua\Player.lua'
    no file 'c:\Users\tct9\Documents\Lua\Player\init.lua'
    no file '.\Player.lua'
    no file 'c:\Users\tct9\Documents\Lua\Player.dll'
    no file 'c:\Users\tct9\Documents\Lua\loadall.dll'
    no file '.\Player.dll'
    no file 'c:\Users\tct9\Documents\Lua\Player52.dll'
    no file '.\Player52.dll'
stack traceback:
    [C]: in function 'require'
    c:\Users\tct9\Documents\Lua\ScriptLua\Games\Players.lua:1: in main chunk
    [C]: in ?

如何才能使用这个模块?

重要提示

我正在使用 VSCode。

PATH 变量:...; C:\Users\tct9\Documents\Lua

变量LUA_PATH:C:\Users\tct9\Documents\Lua

月球路径:C:\Users\tct9\Documents\Lua

脚本路径:C:\Users\tct9\Documents\Lua\ScriptLua\Games

【问题讨论】:

  • Player.lua 保存在哪里?
  • 我做到了。跟着书《Programming in Lua 4th edition》中的章节,报错是一样的。
  • 如果Player.luaPlayers.lua 位于同一文件夹中,您也可以使用dofile"Player.lua" 代替require
  • 我使用了dofile,但错误仍然存​​在。 “无法打开播放器:没有这样的文件或目录”。

标签: module lua require


【解决方案1】:

我做了:

print (package.path)

我发现“C:\Users\tct9\Documents\Lua\?.lua”

然后我添加到 package.path:

package.path = package.path .. "; C:\\Users\\tct9\\Documents\\Lua\\ScriptLua
\\Games\\?. lua"

之后模块正常工作!

【讨论】:

  • ; C:\\Users\\tct9\\Documents\\Lua\\ScriptLua \\Games\\?.lua" 没有空格
【解决方案2】:

[运行] lua "c:\Users\tct9\Documents\Lua\ScriptLua\Games\Players.lua" lua: c:\Users\tct9\Documents\Lua\ScriptLua\Games\Players.lua:1: 模块 未找到“播放器”: 没有字段 package.preload['Player'] 没有文件'c:\Users\tct9\Documents\Lua\lua\Player.lua' 没有文件'c:\Users\tct9\Documents\Lua\lua\Player\init.lua' 没有文件'c:\Users\tct9\Documents\Lua\Player.lua' 没有文件'c:\Users\tct9\Documents\Lua\Player\init.lua' 没有文件'.\Player.lua' 没有文件'c:\Users\tct9\Documents\Lua\Player.dll' 没有文件'c:\Users\tct9\Documents\Lua\loadall.dll' 没有文件'.\Player.dll' 没有文件'c:\Users\tct9\Documents\Lua\Player52.dll' 没有文件'.\Player52.dll'

是 Lua 试图查找的文件列表。如果您的 Player.lua 不是其中之一,您必须确保该文件位于列出的路径之一中,或者在需要之前将包含您的文件的路径添加到 package.path

从您的脚本手动或将其添加到LUA_PATH

【讨论】:

  • 我将文件更改为文件夹“C:\Users\tct9\Documents\Lua”,但错误仍然存​​在。