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

我目前正在尝试使用连接、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 变量中。

点赞
用户1368932
用户1368932

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

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

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

2012-05-27 23:03:34
用户107090
用户107090

使用以下代码也能实现:

for f=1,8 do
   _G["f"..f]=function () print(f) end
end

注:以上代码为 Lua 语言。

2012-05-28 03:45:04