我可以创建一个没有 Lua 函数名称的 NLua.LuaFunction 吗?

Can I create an NLua.LuaFunction without the name of the Lua function?

我正在尝试创建一个方法来计算字符串和 returns 一个 LuaFunction 对象,用于其中包含的函数。这些字符串将由用户输入,所以我无法事先知道函数的名称。示例字符串:

function doSomething()
    print('x')
end

我希望 LuaFunction 指向 doSomething

我能够使用正则表达式来捕获函数的名称,然后使用 NLua.Lua.GetFunction 但这不适用于函数中的函数。

现在我的代码使用 KeraLua.Lua.LoadString 和 returns 一个 LuaFunction 用于由 LoadString 创建的块。这种工作,但它意味着 LuaFunction 不能接受 args。

This answer 与我想要的类似,但我不能像它显示的那样强制函数成为 table 的成员。

您必须使用 DoString 而不是 LoadStringLoadString 不执行它只是将其编译为 运行 之后的代码,因此它没有在状态中定义函数。该函数必须为 GetFunction 定义或索引才能工作。

如果输入字符串只是一个函数定义,那么您可以执行以下任一操作:

Lua state = new Lua();
state.DoString((string)s); //define function in state by executing the input.

LuaFunction f1 = state.GetFunction("doSomething");
f1.Call("f1");

LuaFunction f2 = (LuaFunction)state["doSomething"];
f2.Call("f2");

示例用户输入:

function doSomething(s)
    print(s)
end

此解决方案不涵盖本地函数或存储在表中的函数。