1

我有一个简单的脚本,我想用 require 导入另一个脚本,但是当我从 Notepad++ 运行它时,我得到了 require 产生的常见错误。

有趣的是,它在一小时前工作,从那时起我没有重新启动计算机。

这些文件位于同一目录中,因此简单的文件名(不带 .lua)有效并且应该仍然有效。(相对路径)

Lua 运行脚本很好。

这是我在记事本中输入的: cmd /k lua "$(FULL_CURRENT_PATH)"

早些时候我也遇到了 Penlight 的问题,可能有一些联系,所以这里是:我试图要求“pl”,但找不到模块。(从 SciTE 运行,以前工作过)我在 Lua 命令行中尝试过它,它就像一个魅力。在 SciTE 中再次尝试,瞧,它再次起作用了。

我不知道是什么原因造成的。

ps.:使用 lfs 模块和 os.execute("cd /d ...path...") 不起作用

4

1 回答 1

1

Lua 正在 LUA_PATH 的文件夹中搜索您需要的模块。在您通过 F5 运行的脚本中,输入以下语句:

print('current path is:')
os.execute('cd')
require 'someModuleThatDoesntExist'

打印“工作”文件(程序文件/记事本++)后,它会尝试找到所需的模块并失败。回溯显示 Lua 浏览了许多不同的文件夹,其中没有一个是包含 FULL_CURRENT_PATH 的文件夹,因此它找不到模块。

你有几个选择:

  1. 将您的脚本放在列出的路径之一中
  2. 在您的环境中设置 LUA_PATH 以包含脚本所在的文件夹名称
  3. 从您的脚本中更改 package.path 以便它知道在哪里寻找其他模块。您可以通过以下任一方式执行此操作:
    • 包括一个额外的参数到你的 F5,即 CURRENT_DIRECTORY,并使你的脚本采用它的第一个命令行参数 (CURRENT_DIRECTORY) 将它添加到 package.path
    • 在脚本启动时解析 arg[0],以获取包含脚本的文件夹,并扩展 package.path

例如,对于 #3,第一个选项,您将使用

cmd /k lua "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)"

在记事本++和你的Lua模块中你会使用

thisModuleDir = arg[1]
package.path = thisModuleDir .. ";" .. package.path
require 'yourmodule'
于 2013-12-07T13:28:32.290 回答