解析Lua文件的参数

3

我有一个名为data.lua的文件

#! /usr/bin/env lua
local a = {
    b = {
        c = {
            version = "z.y"
        },
        d = {
            version = "z.w"

        },
        getcversion = function ( self )
            print( self.c.version )
        end
    }
}

现在我需要“getcversion()”函数。
a.b:getcversion()

问题在于,我需要从外部调用它:
data.lua "a.b:getcversion()"

我尽力了,但我无法解决这个问题...

有人知道如何调用'getcversion()'吗?

提前感谢, 敬礼


嗨,也许你可以试试这个:https://en.wikibooks.org/wiki/Lua_Programming/command_line_parameter - jspcal
1
"outside" 是什么?另一个 Lua 文件吗? - Piglet
在外部,这是一个调用名为 data.lua 文件的 Bash 脚本:"a.b:getcversion()"。 - tuxd3v
2个回答

1

你需要在你的脚本中添加类似以下内容的代码:

load(arg[1], "<string>", "t", {a = a})()

load函数会加载传入的参数(arg[1])的内容,并返回一个函数,该函数将在特定环境({a = a}表)中执行该代码,因为您需要将本地变量的值传递给您的代码(Lua 5.2+)。

请记住,这将允许调用者向您的脚本传递任意Lua代码,可能存在安全问题。

错误处理留给读者自行处理。


非常感谢您对此的帮助。load (chunk [, chunkname [, mode [, env]]]) 这是问题的答案 :) 我现在将坚持使用:load( arg[1] .. "()", arg[1] .. "()", "t", {a = a} )()。这样,我可以从bash中调用而无需转义括号“\(\)”,例如:data.lua a.b:getcversion。感谢您的帮助! - tuxd3v

1
return a 添加到 data.lua 的末尾,将其转换为模块,然后:
$ lua -e 'a = require("data"); print(a.b:getcversion())'
z.y

谢谢您的回复!这是另一种解决方案,我之前不知道 :) - tuxd3v

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接