解析 Lua 文件的参数

我有一个文件: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()' 吗?

提前感谢, 问候。

点赞
用户1442917
用户1442917

你需要将以下内容添加到你的脚本中:

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

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

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

错误处理留给读者作为练习。

2019-04-17 21:59:34
用户7552
用户7552

data.lua 的结尾添加 return a 以将其变成一个模块,然后运行以下命令:

$ lua -e 'a = require("data"); print(a.b:getcversion())'
z.y
2019-04-17 22:44:27