Lua(要求)调用所需文件名的非预期打印

Lua (require) invoke an not intended print of required file name

当在两个文件之一的 testt.lua 中调用 require 时,return 被移动并且 movee.lua.

movee 大部分是需要的 class,但应该可以接受直接带参数调用。

movee.lua

local lib = {} --this is class array

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 或打印文件名。

require("movee")

将在movee.lua

内执行代码
lib.moveAround(...)

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

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

您的期望不正确。 Lua,以及与此相关的大多数脚本语言,在包含模块和执行 提供该模块的 Lua 文件之间并没有太大的区别。每个 function 语句都是一个语句,其执行会创建一个函数对象。在执行这些语句之前,这些函数不存在。您的 local lib = {} 也是如此。等等。

现在,如果您想区分用户何时尝试 require 您的脚本作为模块和用户何时尝试在命令行上执行您的脚本(或仅通过 loadfile 或类似的),那么我建议执行以下操作。

检查为脚本提供的参数数量。如果没有给出参数,那么你的脚本可能是 required,所以当用户 requires 你的脚本时,不要做你不想做的事情:

local nargs = select("#", ...)
if(nargs > 0) then
  lib.moveAround(...)
end

通过替换

解决
lib.moveAround(...)

local argument = {...}
if argument[1] ~= "movee" and argument[2] ~= "movee" then
    lib.moveAround(...)
end