有条件地执行来自参数的代码

时间:2014-02-04 07:54:46

标签: lua

我试图通过函数参数有条件地执行一些代码块,具体取决于全局变量。

我尝试了以下内容:

function PrintCondition(CodeIfA, CodeIfB)
    if SomeGlobal == "A" then
        loadstring(CodeIfA);
        return true;
    elseif SomeGlobal == "B" then
        loadstring(CodeIfB);
        return true;
    else
        Error();
        return false;
    end
end

然后我用

调用该函数
local temp = PrintCondition(
    [[
        print("global is A");
    ]],
    [[
        print("global is B");
    ]]
);
print(temp); -- prints 'true'

然而,它似乎不起作用。即使我错误格式化字符串以引发语法错误,我也什么也得不到。

我在尝试一些无法做到的事情吗?

2 个答案:

答案 0 :(得分:3)

Lua 5.2中的所有loadstring()(或load())确实是加载字符串,它没有真正运行它,你需要将它保存到函数然后运行它:

local func = loadstring(CodeIfA);
func();

答案 1 :(得分:2)

loadstring返回一个函数实例。您需要从函数返回loadstring执行:

function PrintCondition( CodeIfA, CodeIfB )
    if SomeGlobal == "A" then
        return loadstring(CodeIfA)
    elseif SomeGlobal == "B" then
        return loadstring(CodeIfB)
    else
        Error()
        return false
    end
end

然后在外面打电话:

local temp = PrintCondition(
    [[
        print("global is A");
    ]],
    [[
        print("global is B");
    ]]
)
temp()