【问题标题】:Can Lua's `require` handle paths containing hidden directories / full stops?Lua 的 `require` 可以处理包含隐藏目录/句号的路径吗?
【发布时间】:2012-08-07 17:47:04
【问题描述】:

在 Linux 下,使用 Lua 5.1,我有一个位于隐藏目录下的 lua 脚本:~/.texmf/lua/print_table.lua。 (它与 LuaTeX 相关,这就是它在 texmf 目录中的原因。)我从我的主目录交互地运行 lua,尝试 require 该文件,并收到以下错误消息:

> require('.texmf/lua/print_table')
stdin:1: module '..texmf/lua/print_table' not found:
    no field package.preload['.texmf/lua/print_table']
    no file './/texmf/lua/print_table.lua'
    ... [file not found in other - irrelevant - trees, either, of course]

> require('/home/me/.texmf/lua/print_table')
stdin:1: module '/home/me/.texmf/lua/print_table' not found:
    no field package.preload['/home/me/.texmf/lua/print_table']
    no file './/home/me//texmf/lua/print_table.lua'
    ...

所以,显然require 将句点变成了斜线。转义句号不起作用:我尝试将句号加倍,在它前面贴一个反斜杠,然后在它前面贴两个反斜杠。有什么方法可以require 路径中有隐藏目录(或任何其他句号)的文件?

【问题讨论】:

    标签: path lua


    【解决方案1】:

    require 需要一个模块名称,而不是一个路径

    您可能希望将/home/me/.texmf/lua/?.lua 添加到package.pathLUA_PATH。然后你就可以说require "print_table"

    【讨论】:

      【解决方案2】:

      您可以使用loadfile 代替require;这样,您可以指定直接路径。最近有个问题...

      【讨论】:

      • 啊,我搜索的是“隐藏目录”而不是“完整路径”。所以'loadfile' 接受一个路径,而require 只接受一个点或斜线分隔的模块名称,并以一种有点可怜的方式对待它。现在一切都清楚了。谢谢,Bartek 和 lhf。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 2014-09-02
      • 2021-08-26
      相关资源
      最近更新 更多