0

我目前正在尝试使用串联、加载字符串和 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 中。

4

2 回答 2

2

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

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

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

于 2012-05-27T23:03:34.447 回答
1

同样的事情可以用

for f=1,8 do
   _G["f"..f]=function () print(f) end
end
于 2012-05-28T03:45:04.903 回答