如何在不同文件夹中加载模块

我有以下文件夹结构

-- folder1

------main.lua

------ sub_folder

---------func1.lua

-- folder2

------func2.lua

我想通过require命令在main.lua中加载func1.luafunc2.lua

PS:一个文件夹中的init.lua是做什么用的?

点赞
用户2698261
用户2698261

在纯 lua 中,你可以这样载入它们:

local func1 = loadfile "sub_folder/func1.lua"
local func2 = loadfile "../folder2/func2.lua"

参考:Pil 第8章

如果你是在使用嵌入到其他应用程序中的 Lua(例如游戏、软件等),那么你需要告诉我们这是什么应用程序,否则我们无法帮助你。对于你的补充问题也是如此。但通常情况下 init.lua 是第一个被执行的文件,即它将载入其他文件等。

2014-07-31 08:25:56
用户869951
用户869951

func1.lua 可以通过以下方式轻松加载:

require 'sub_folder.func1'

因为 sub_foldermain.lua 在同一个文件夹中。

对于 func2.lua,要告诉 require 在 "上一层级" 查找是不可能的,因此您必须告诉 Lua 如何查找所需的模块。这可以通过至少两种方式完成:

  1. 通过 LUA_ PATH 环境变量:

    • path/to/folder2/?.lua 追加到其中,然后 main.lua 可以执行 require "func2"
    • 或者将 path/to/parent-of-folder2/?.lua 追加到其中,然后 main.lua 可以执行 require "folder2.func2"
  2. 通过编辑脚本中的 package.path

    package.path = package.path .. ';../?.lua'
    require 'func2'
    

    或者

    package.path = package.path .. ';../../?.lua'
    require 'folder2.func2'
    

第一种方法更加 "永久",因为设置在操作系统环境中;即使您将 folder1 移动到系统上的其他位置,而不移动 folder2,它也可以正常工作。第二种方法是动态的,因此它可以在您放置文件夹结构的任何地方工作,即,如果 folder2 始终是 folder1 的兄弟文件夹,则方法 2 生效,方法 1 失败(或需要编辑LUA_PATH)。

2014-08-04 00:21:11