【问题标题】:load script from other file extension?从其他文件扩展名加载脚本?
【发布时间】:2014-08-28 11:19:41
【问题描述】:

是否可以从扩展名为 .lua 的文件中加载模块?

require("grid.txt") 结果:

module 'grid.txt' not found:
no field package.preload['grid.txt']
no file './grid/txt.lua'
no file '/usr/local/share/lua/5.1/grid/txt.lua'
no file '/usr/local/share/lua/5.1/grid/txt/init.lua'
no file '/usr/local/lib/lua/5.1/grid/txt.lua'
no file '/usr/local/lib/lua/5.1/grid/txt/init.lua'
no file './grid/txt.so'
no file '/usr/local/lib/lua/5.1/grid/txt.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
no file './grid.so'
no file '/usr/local/lib/lua/5.1/grid.so'
no file '/usr/local/lib/lua/5.1/loadall.so'

我怀疑有可能在调用 require 之前将脚本加载到 package.preaload['grid.txt'] (无论是什么)?

【问题讨论】:

    标签: module lua require file-extension


    【解决方案1】:

    这取决于你所说的加载。

    如果要执行当前目录下名为grid.txt 的文件中的代码,则只需执行dofile"grid.txt"。如果grid.txt 在不同的目录中,请给出它的路径。

    如果您想使用require 执行的路径搜索,请在package.path 中添加.txt 的模板,并使用正确的路径,然后执行require"grid"。请注意没有后缀:require 加载由 names 而非 paths 标识的 modules。

    【讨论】:

      【解决方案2】:

      如果您想让require("grid.txt") 工作,如果有人尝试这样做,那么是的,您需要手动loadfile 并运行脚本并放置它返回的任何内容(或者当模块没有返回时,需要记录的任何内容返回任何东西)到package.loaded["grid.txt"]。

      或者,您可以为您设置到package.preload["grid.txt"] 中的此类条目编写自己的加载器,它会查找并加载/运行文件,或者更一般地说,您可以自己编写一个加载器函数,将其插入到package.loaders ,然后在它看到“*.txt”模块出现时让它完成它的工作。

      【讨论】:

      • 或者只是做package.path = "?.txt;"..package.path
      • @hjpotter92 假设他想写require("grid"),那么根据 lhf 在他的回答中的评论是的。
      • package.path = "?.txt;"..package.path 胜
      猜你喜欢
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 2016-07-29
      相关资源
      最近更新 更多