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

时间:2014-07-31 06:38:50

标签: lua

我有以下文件夹结构

- 的 folder1中
------ main.lua
------的 sub_folder
--------- func1.lua
- 的文件夹2
------ func2.lua

我想通过func1.lua命令{/ 1}} func2.lua加载main.luarequire

PS:文件夹中的init.lua做什么

2 个答案:

答案 0 :(得分:2)

在vanilla lua中,你可以像这样加载它们:

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

请参阅:Pil Chapter 8

如果您在某些其他应用程序中使用Lua(即游戏,软件等),那么您需要告诉我们这是什么,或者我们无法帮助您。这也适用于你的P.S问题。但通常,init.lua通常是第一个要执行的文件,即它会加载其他文件等。

答案 1 :(得分:0)

func1.lua可以通过

轻松加载
require 'sub_folder.func1'

因为sub_foldermain.lua位于同一文件夹中。

对于func2.lua,没有办法告诉require搜索“一级”,所以你必须告诉Lua如何找到所需的模块。这可以通过至少两种方式完成:

  1. via LUA_PATH环境变量:
    • 向其添加path/to/folder2/?.lua,然后main.lua可以require "func2"
    • 或向path/to/parent-of-folder2/?.lua添加main.lua,然后require "folder2.func2"可以package.path
  2. 通过编辑脚本中的package.path = package.path .. ';../?.lua' require 'func2'

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

    folder1
  3. 第一种方法更“永久”,因为设置在OS环境中;即使您将folder2移动到系统上的其他位置,也不会移动folder2,它也会有效。第二种方法是动态的,因此无论您放置文件夹结构的位置如何,它都会起作用,即,如果folder1始终是{{1}}的兄弟文件夹,则方法2可用,方法1失败(或要求您编辑LUA_PATH)。