我可以创建一个没有 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
而不是 LoadString
。 LoadString
不执行它只是将其编译为 运行 之后的代码,因此它没有在状态中定义函数。该函数必须为 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
此解决方案不涵盖本地函数或存储在表中的函数。
我正在尝试创建一个方法来计算字符串和 returns 一个 LuaFunction 对象,用于其中包含的函数。这些字符串将由用户输入,所以我无法事先知道函数的名称。示例字符串:
function doSomething()
print('x')
end
我希望 LuaFunction 指向 doSomething
。
我能够使用正则表达式来捕获函数的名称,然后使用 NLua.Lua.GetFunction 但这不适用于函数中的函数。
现在我的代码使用 KeraLua.Lua.LoadString 和 returns 一个 LuaFunction 用于由 LoadString 创建的块。这种工作,但它意味着 LuaFunction 不能接受 args。
This answer 与我想要的类似,但我不能像它显示的那样强制函数成为 table 的成员。
您必须使用 DoString
而不是 LoadString
。 LoadString
不执行它只是将其编译为 运行 之后的代码,因此它没有在状态中定义函数。该函数必须为 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
此解决方案不涵盖本地函数或存储在表中的函数。