我正在尝试使用串联,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中。
答案 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