努力从命令行调用 lua 函数

Struggling with calling lua functions from the command line

我有以下代码:

dofile(arg[1])

function1 = arg[2]
argument = arg[3]

returned = _G[function1](argument)
print(returned)

它被设计为接受三个命令行参数和运行一个来自文件的函数。

所以,我 运行 命令 lua libs.lua "printStuff.lua" "printStuff" "\"Hello, World\"",我总是这样结束:

"Hello, World"
nil

我不明白为什么我总是得到“nil”。

以下是printstuff.lua的内容:

function printStuff(stuff)
    print(stuff)
end

这是意料之中的事情。这里发生了什么:

  1. 您正在执行由第一个参数 printstuff.lua 指定的文件,它将在全局 table _G.[=36 中留下函数 printStuff =]
  2. 您正在使用第二个参数 printStuff 索引全局 table,获取该函数
  3. 您正在调用刚刚使用第三个命令行参数 "Hello World!" 获得的函数作为参数,打印它,并将结果存储在全局变量 returned 中。函数 printStuff 没有 return 任何东西(那里没有 return,即使有,print 也没有 return 任何东西),所以你将 nil 分配给 returned.
  4. 您正在打印 returned,即 nil

旁注:为了提高可读性,我将使用可变参数 ... 而不是 arg table:

local file, func, param = ...
dofile(file); print(func(param))

为什么不干脆...

-- xlua.lua
-- Example: lua xlua.lua os date "%H:%M:%S"
-- Or: lua xlua.lua _G print "Hello World"
-- Or: lua xlua.lua dofile /path/to/someusefull.lua "Arg for someusefull.lua"

local result = _G[arg[1]][arg[2]](arg[3])

-- 5. Only put out whats not nil
if (result ~= nil) then
  print(result)
end