Function 需要动态创建Lua函数

Function 需要动态创建Lua函数,function,lua,Function,Lua,我试图从另一个函数中“动态”创建一个Lua函数。名为“fx”的新Lua函数应该对标量变量(比如x)进行操作,并返回f_x(x),其中f_x(x)可以是“x+1”或“x^2”。重要的是,函数名“fx”是给定的(因为它将在其他函数中与此名称一起使用),但是它的属性——特别是,它是否返回“x+1”或“x^2”——应该可以动态修改 假设“x”是标量值输入变量,“y”是包含指令的字符串,如“x+1”或“x^2”,则“fx”应施加在“x”上。我天真地尝试过 function make_func (x,y)

我试图从另一个函数中“动态”创建一个Lua函数。名为“fx”的新Lua函数应该对标量变量(比如x)进行操作,并返回f_x(x),其中f_x(x)可以是“x+1”或“x^2”。重要的是,函数名“fx”是给定的(因为它将在其他函数中与此名称一起使用),但是它的属性——特别是,它是否返回“x+1”或“x^2”——应该可以动态修改

假设“x”是标量值输入变量,“y”是包含指令的字符串,如“x+1”或“x^2”,则“fx”应施加在“x”上。我天真地尝试过

function make_func (x,y)
   return ( function fx(x) return y end )
end
但这不起作用

任何帮助和指导都将不胜感激

不清楚“fx”应该如何进入图片,但如果您有一个包含潜在可执行Lua代码的字符串(如果在“x”存在的上下文中这样做,将编译Lua表达式),那么这似乎是一个从Lua代码位构建字符串并执行它的简单情况:

function make_func (x, lua_op)
   return dostring("return function(x) return " .. lua_op .. " end")
end
这需要
lua_op
存储一个合法的lua表达式字符串

如果要将函数存储在全局变量“fx”中,可以在返回函数之前执行以下操作:

function make_func (x, lua_op)
   fx = dostring("return function(x) return " .. lua_op .. " end")
   return fx
end

Lua中被称为“fx”的函数实际上没有名称。您的
make_func
只是将函数存储在名为“make_func”的全局表项中,但函数本身可以独立于此而存在。那么,您是在尝试创建一个存储在名为“fx”的全局文件中的函数,还是希望将其存储在何处?@nicolas-我为无意中的含糊不清表示歉意。我想使用名为“fx”的全局函数名。非常感谢!一个(希望很容易回答)后续问题:我是否需要加载库才能访问
dostring
?我问这个问题的原因是,我不使用独立的Lua程序,而是使用嵌入Lua的LuaTeX。LuaTeX似乎无法识别本机的
dostring
。@Mico:那么您必须查找LuaTeX的文档。如果它没有为您提供
dostring
loadstring
或类似的编译功能,那么您就不能这样做。@Mico还可以查看是否有
load
功能,这就是5.3中调用的
loadstring
,我认为您的答案符合要求,但是
x
的更好解释是
x
是结果函数中的一个形式参数,在y(主体代码)中也是可用的。它会影响x的任何外部使用。