Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否可以创建一个没有Lua函数名称的NLua.luaffunction?_C#_Lua_Nlua - Fatal编程技术网

C# 我是否可以创建一个没有Lua函数名称的NLua.luaffunction?

C# 我是否可以创建一个没有Lua函数名称的NLua.luaffunction?,c#,lua,nlua,C#,Lua,Nlua,我试图创建一个方法,用于计算字符串并为其中包含的函数返回一个LuaFunction对象。这些字符串将由用户输入,因此我无法事先知道函数的名称。示例字符串: function doSomething() print('x') end 我希望luaffunction指向doSomething 我能够使用正则表达式捕获函数名,然后使用NLua.Lua.GetFunction,但这不适用于函数中的函数 现在,我的代码使用KeraLua.Lua.LoadString并为LoadString创建的

我试图创建一个方法,用于计算字符串并为其中包含的函数返回一个LuaFunction对象。这些字符串将由用户输入,因此我无法事先知道函数的名称。示例字符串:

function doSomething()
    print('x')
end
我希望luaffunction指向
doSomething

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

现在,我的代码使用KeraLua.Lua.LoadString并为LoadString创建的块返回一个LuaFunction。这种方法可以工作,但它意味着LuaFunction不能接受args


与我想要的类似,但我不能强制函数成为表的成员,如图所示。

您必须使用
DoString
而不是
LoadString
LoadString
不执行代码,它只是编译代码以便稍后运行,因此它不在状态中定义函数。必须为
GetFunction
或索引定义函数才能工作

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

Lua state=newlua();
state.DoString((string)s)//通过执行输入定义处于状态的函数。
luaffunction f1=state.GetFunction(“doSomething”);
f1.调用(“f1”);
LuaFunction f2=(LuaFunction)状态[“doSomething”];
f2.调用(“f2”);
用户输入示例:

功能剂量仪
印刷品
结束

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

您必须使用
DoString
而不是
LoadString
LoadString
不执行代码,它只是编译代码以便稍后运行,因此它不在状态中定义函数。必须为
GetFunction
或索引定义函数才能工作

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

Lua state=newlua();
state.DoString((string)s)//通过执行输入定义处于状态的函数。
luaffunction f1=state.GetFunction(“doSomething”);
f1.调用(“f1”);
LuaFunction f2=(LuaFunction)状态[“doSomething”];
f2.调用(“f2”);
用户输入示例:

功能剂量仪
印刷品
结束

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

我认为,如果不通过表访问函数,就无法访问其他匿名函数。您能接受
sometable.function
作为输入吗?使用正确的输入,您可以使用该输入访问函数。它们不是非函数,我只是不知道名称。抱歉,可能误解了问题,您是否正在尝试获取用户刚刚编写的函数的名称,输入是整个函数?是的,好吧,我的意思是我需要得到没有标识符名称的函数。函数定义格式是强制的吗?您可以定义它
doSomething=function()…
,无论是否进行
local
,您也可以在表中定义它,甚至在全局范围内定义它\u G['doSomething']=function()…这些都在解决方案的范围内吗?我不相信您可以在不通过表访问的情况下访问其他匿名函数。您能接受
sometable.function
作为输入吗?使用正确的输入,您可以使用该输入访问函数。它们不是非函数,我只是不知道名称。抱歉,可能误解了问题,您是否正在尝试获取用户刚刚编写的函数的名称,输入是整个函数?是的,好吧,我的意思是我需要得到没有标识符名称的函数。函数定义格式是强制的吗?您可以定义它
doSomething=function()…
有或没有过程
local
,您也可以在表中甚至全局
中定义它['doSomething']=function()…
这些都在解决方案的范围内吗?谢谢,效果很好。我在运行区块前后使用了
NLua.Lua.GetObjectFromPath(“\u G”).Keys
,然后执行了
Enumerable.Exception()
,以获取添加的内容,这意味着我不必事先知道名称!)谢谢,做得很好。我在运行区块前后使用了
NLua.Lua.GetObjectFromPath(“\u G”).Keys
,然后执行了
Enumerable.Exception()
,以获取添加的内容,这意味着我不必事先知道名称!)