Разбор аргументов в файл Lua - PullRequest
3 голосов
/ 18 апреля 2019

У меня есть файл: 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 ()'?

Заранее спасибо, Привет

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Добавьте return a в конец data.lua, чтобы превратить его в модуль, а затем:

$ lua -e 'a = require("data"); print(a.b:getcversion())'
z.y
0 голосов
/ 18 апреля 2019

Вам нужно добавить что-то вроде следующего в ваш скрипт:

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

load загрузит содержимое переданного параметра (arg[1]) и вернет функцию, которая будет выполнять этот код в определенной среде (предоставляется как таблица {a = a}), так как вам нужно передать значения локальные переменные в вашем коде (Lua 5.2 +).

Имейте в виду, что это позволит вызывающей стороне передавать произвольный код Lua в ваш сценарий, что может быть проблемой безопасности.

Обработка ошибок оставлена ​​читателю в качестве упражнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...