努力从命令行调用 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
这是意料之中的事情。这里发生了什么:
- 您正在执行由第一个参数
printstuff.lua
指定的文件,它将在全局 table _G
.[=36 中留下函数 printStuff
=]
- 您正在使用第二个参数
printStuff
索引全局 table,获取该函数
- 您正在调用刚刚使用第三个命令行参数
"Hello World!"
获得的函数作为参数,打印它,并将结果存储在全局变量 returned
中。函数 printStuff
没有 return 任何东西(那里没有 return
,即使有,print
也没有 return 任何东西),所以你将 nil
分配给 returned
.
- 您正在打印
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
我有以下代码:
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
这是意料之中的事情。这里发生了什么:
- 您正在执行由第一个参数
printstuff.lua
指定的文件,它将在全局 table_G
.[=36 中留下函数printStuff
=] - 您正在使用第二个参数
printStuff
索引全局 table,获取该函数 - 您正在调用刚刚使用第三个命令行参数
"Hello World!"
获得的函数作为参数,打印它,并将结果存储在全局变量returned
中。函数printStuff
没有 return 任何东西(那里没有return
,即使有,print
也没有 return 任何东西),所以你将nil
分配给returned
. - 您正在打印
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