从字符串创建Lua函数

Joh*_*ith 4 lua

我正在从Lua中的字符串创建函数(x).我正在使用的代码是

function fcreate(fs)
 return assert(loadstring("return function (x) return " .. fs.." end"))()
end
Run Code Online (Sandbox Code Playgroud)

这适用于全局变量,例如

u=fcreate("math.sin(x)")
Run Code Online (Sandbox Code Playgroud)

做对了.

但是,它似乎不喜欢局部变量.所以

local c=1
u=fcreate("math.sin(x)+c")
Run Code Online (Sandbox Code Playgroud)

不会起作用,因为c是本地的.

这可以解决吗?

Mud*_*Mud 13

"loadstring不能用词法作用域编译",所以不,它看不到loadstring调用之外的本地人.


这可以解决吗?

那要看.为什么你首先使用loadtring?Lua支持闭包作为第一类值,所以我从你的例子中看不出为什么你需要 loadtring.

你的例子:

u = fcreate("math.sin(x)+c")
Run Code Online (Sandbox Code Playgroud)

可以在不需要loadstring或您的fcreate功能的情况下重写:

u = function(x) return math.sin(x)+c end
Run Code Online (Sandbox Code Playgroud)

这当然与以下相同:

function u(x) return math.sin(x) + c end
Run Code Online (Sandbox Code Playgroud)

我可以看到一个案例,loadstring如果你有用户可配置的表达式,你想要编译成一些其他函数,但你的本地情况c表明情况并非如此.你想尝试一些自制的lamda语法吗?

  • 我在第一行中提到了您的*问题*,将您链接到Lua的作者自己的解释,说明为什么您的代码无法以您希望的方式工作.然后,因为我很好,并希望有所帮助,我试图解决你的问题*(注意分开两个部分的水平规则).后一部分主要是猜测,因为您的问题的背景/要求没有说明,所以我发布了一些额外的信息,并要求澄清您的要求,以便可以进一步帮助您.谢谢你用downvote奖励我. (8认同)