使用带有Lua 5.1的loadstring在循环中定义一个函数

时间:2012-05-27 22:00:27

标签: lua

我正在尝试使用串联,loadstring和for循环的组合来定义函数。

这是我目前的事情:

> for f=1,8 do
loadstring("function f" .. f .. " () print('" .. f .. "') end")
end
> f1()
stdin:1: attempt to call global 'f1' (a nil value)
stack traceback:
    stdin:1: in main chunk
    [C]: ?

该函数以以下形式计算一组块:'function f()print()end'。但是,正如您所看到的,它似乎没有正确地将函数保存到变量f1-f8中。

2 个答案:

答案 0 :(得分:2)

loadstring()函数返回一个函数,该函数在被调用时执行作为参数给出的代码。它实际上并不调用函数或运行代码。请尝试以下方法:

for f=1,8 do
loadstring("function f" .. f .. " () print('" .. f .. "') end")()
end

添加的括号调用刚刚由loadstring()创建的函数,创建编号函数。

答案 1 :(得分:1)

使用

可以完成同样的事情
for f=1,8 do
   _G["f"..f]=function () print(f) end
end