Lua (require) 调用不必要的打印所需的文件名

当 testt.lua 中调用 require 时,有两个返回值 movee 和 movee.lua。

movee 大多数情况下是一个需要被调用的类,但应该能够接受直接调用带参数的情况。

movee.lua

local lib = {} --这是类数组

function lib.moveAround( ... )
    for i,direction in ipairs(arg) do
        print(direction)
    end
end

function lib.hello()
    print("Hello water jump")
end

lib.moveAround(...)

return lib

testt.la

local move = require("movee")

期望的结果是不要在调用 require 时调用 lib.moveAround 或打印文件名。

点赞
用户2858170
用户2858170
使用 require("movee")

将会执行movee.lua中的代码

lib.moveAround(...)

是该代码的一部分。因此,如果你需要 "movee",你将调用 lib.moveAround

如果预期的结果不是调用它,则从代码中删除该行或不要求该文件。

2019-07-25 18:27:41
用户734069
用户734069

你的期望是不正确的。Lua,以及大多数脚本语言都不认可在引入模块和_执行_提供该模块的Lua文件之间存在太大的区别。每个function语句都是一个语句,其执行会创建一个函数对象。在执行这些语句之前,这些函数是不存在的。对于你的local lib = {}也是一样。等等。

现在,如果你想在用户试图把你的脚本作为模块引入和用户试图通过命令行(或仅仅是loadfile之类的)来执行你的脚本之间做区分,那么我建议你做以下事情。

检查脚本所给出的参数数量。如果没有给出任何参数,那么你的脚本可能是通过require引入的,所以当用户require你的脚本时不要做你不想做的事:

local nargs = select("#", ...)
if(nargs > 0) then
  lib.moveAround(...)
end
2019-07-25 18:29:02
用户1131719
用户1131719

通过替换解决:

lib.moveAround(...)

用以下代码替换:

local argument = {...}
if argument[1] ~= "movee" and argument[2] ~= "movee" then
    lib.moveAround(...)
end
2019-07-26 16:49:06