问题标签 [nlua]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何将对象列表从 C# 传递和迭代到 NLua
我应该如何将对象列表从 C# 传递和迭代到 Lua?
我的示例带有一个数组int
,当我使用自定义类时,我得到了相同的结果:
脚本在哪里
输出是:
它跳过了第一个,我得到了异常:“索引超出了数组的范围。” 我的代码有什么问题?
nlp - Rasa 调用外部 API 抛出 NONE
我使用 rasa 构建了一个小型聊天机器人。我希望我的机器人通过调用外部 api 来讲笑话,但我得到 None 作为响应。
我在这里附上 API 调用方法。
在我的 domain.yml 我有笑话响应槽
在我尝试使用主要和直接指定“-action_get_jokes”的操作下,但它们都不起作用。
lua - LUA 5.2: Load/Require/etc - 将其限制为可以加载的特定目录
我正在尝试在我的游戏中保护 LUA(玩家可以在 LUA 中创建脚本)。我已经删除了许多函数来创建各种沙箱(os.execute
例如,AKA 删除函数。)但是,我的游戏确实使用从其他位置加载脚本来减少编码冗余。又名:
require("Scripts/Additional/Crafting")
在文件的顶部。
对我来说,这很好,但我不知道将 require/load/file.read() 保留为没有限制的影响,或者如果可能覆盖它,以便他们无法从外部加载或读取文件服务器。
现在我正在使用 NLUA (C#) 和 LUA5.2。我在创建 LUA 状态时删除了这些功能。
我想做的是保留 LOAD/REQUIRE/etc,但事先通过初始检查覆盖它,以确保它们位于 SCRIPT 目录中。新函数本身不可编辑(因为我将使用 NLUA 在 C# 中对其进行硬编码,或者在他们无法访问的文件夹之外创建一个单独的文件)。
或者,我可以通过 C# 对这些函数的脚本进行快速检查,并使用 REGEX 验证它们使用的目录,但我想知道 LUA 是否可以自己处理它。
抱歉,如果没有正确解释。
lua - 获取 Lua 脚本错误,称为:未知 Lua 脚本错误
我的 Lua 脚本对我来说很好,但有些人遇到了问题。
他们不断收到此错误:
查看我的脚本,正是这里的这部分给出了错误:
有些人通过将脚本和运行 Lua 脚本的软件移动到他们的 C: 驱动器来解决这个问题。其他人仍然有这个问题,即使以管理员身份运行,但我被告知这可能是因为他们的系统语言不是英语。
有谁知道为什么会导致这种情况?就像我说的那样,它对我来说运行良好。(使用 Windows 10)
lua - setmetatable 到底是什么,出于安全原因,我该如何避免它?
通常沙盒会阻止 setmetatable,如下所示:
问题是,我不想使用 setmetatable。它到底是什么,我将如何解决它?在上述情况下,它只是一个作为复制“mt”变量的全局变量吗?我应该做些什么具体的事情吗?
谢谢。
c# - 终止 NLua 脚本执行
我正在使用 NLua 在我的应用程序中运行 Lua 脚本。我需要实现随时终止在单独线程中运行的脚本的能力,例如用户按下“停止”按钮并且脚本必须立即终止。我已经阅读了 SetDebugHook 并尝试关闭 Lua 状态并在状态上调用错误,但我总是得到 AccessViolationException。
我试过了
试图用锁同步线程
同样的问题。AccessViolationException
谢谢。
c# - 我无法使用 Nuget Nlua 在 C# 中读取 .lua 文件
将 Visual Studio 与类应用程序一起使用,我通过 NuGet 添加了 NLua。我想读入 .lua 文件(顺便说一句,有更好的方法让我知道)我的代码是这样的:
但是当我运行它时,我在上面的行中遇到了一个异常:
System.BadImageFormatException HResult=0x8007000B 消息=尝试加载格式不正确的程序。(HRESULT 异常:0x8007000B) Source=KeraLua StackTrace:在 KeraLua.NativeMethods.luaL_newstate() 在 NLua.Lua..ctor()
我究竟做错了什么?我试图搜索互联网并提出了解决方案,因为我正在运行一个 64 位应用程序,而我正在尝试以 32 位加载(NLUA)的应用程序。是这样吗?
谢谢你
c# - 我可以创建一个没有 Lua 函数名称的 NLua.LuaFunction 吗?
我正在尝试创建一个评估字符串并为其中包含的函数返回 LuaFunction 对象的方法。这些字符串将由用户输入,因此我无法事先知道函数的名称。示例字符串:
我希望 LuaFunction 指向doSomething
.
我能够使用正则表达式来捕获函数的名称,然后使用 NLua.Lua.GetFunction 但这不适用于函数中的函数。
现在我的代码使用 KeraLua.Lua.LoadString 并为 LoadString 创建的块返回一个 LuaFunction。这种工作,但这意味着 LuaFunction 不能接受 args。
这个答案与我想要的类似,但我不能像它显示的那样强制函数成为表的成员。
c# - 我可以在 Nlua 中使用静态类吗?
首先,我不是以英语为母语的人,对于这个问题可能产生的任何沟通错误,我深表歉意。另外,不能真正理解你提出问题的一些指导方针,所以按照我对它的理解。因此,如果我违反了任何习俗,请告诉我。
背景
我一直在制作一个尝试为代码实现 xaml hot reload 之类的应用程序。由于我不能直接使用像 c# 这样的编译语言来实现它,我决定我将依赖第三方脚本语言,认为我可以在其中编写一些我的应用程序逻辑,然后更快地将其部署到设备上,因为我会只需按一个按钮即可发送代码。因此,可以将其想象为 react-native 世界中的 expo 客户端。
我决定使用 lua 作为脚本语言,不仅因为它编写代码非常简单,还因为它对 .net 有很好的绑定,当然我说的是 Nlua。而且,由于 Ironpython3 还没有准备好投入生产,老实说我有什么选择?
我面临的问题
因此,由于我必须绑定一些 xamarin.essentials 内容以使我更轻松地编写应用程序的 lua 端,因此我必须与一些具有静态方法等的对象进行交互。我认为在 Nlua 中使用静态方法会非常直观和直接,尽管到目前为止我似乎错了。
如何重现问题
- 因此,在 Visual Studio 中,创建一个 xamarin.forms 项目,随意命名,没关系。
- 接下来,将 Nlua nuget 包添加到所有项目中。它需要集成到所有这些中,因为它与某些 xamarin.forms 插件一样,依赖本机库来工作,因此需要将它们包含在适当的位置以便操作系统找到它们。当安装在受支持的项目类型中时,这是由包自动完成的,所以这样做。
- 将 Nlua 命名空间添加到 MainPage 内容页面的代码隐藏顶部,如下所示:
- 为了方便以后使用,向 MainPage 类添加一个类级别的属性,如下所示:
- 现在,为简单起见,在页面构造函数中对其进行初始化:
- 在页面的 xaml 中,添加一个用于输入文本的编辑字段和一个能够运行它的按钮:
- 在按钮单击处理程序中,添加代码以加载编辑框中的内容,然后让 nlua 执行它,如下所示:
- 现在,添加一个新类,随心所欲地调用它,我叫我的 tts。删除文件与生成的所有内容,然后在其中添加以下内容:
- 回到主内容类,无论是在构造函数中还是在从构造函数调用的专用方法中,注册 lua 类型,如下所示:
预期行为
如果使用符号,它应该说出赋予函数的参数.
,例如 tts.speak("hello world")
实际行为
当执行带有.
符号的调用时,lua 解释器会抛出以下错误:
[string "chunk"]:1: 尝试调用一个 nil 值(字段 'speak')。
到目前为止我尝试了什么
- 首先,我尝试使用 typeof 关键字获取静态对象的类型,然后将其直接注册为 lua 可访问值,如上所示。如您所见,这引发了错误。
- 例如,如果我尝试像函数一样调用类型来获取文档中显示的新对象,它会再次失败。
- 如果我使用该
State.UseClrPackage();
方法,然后手动导入这些东西,它也不起作用,无法访问任何方法或变量,lua 说它们都是“空的”。
注意:经过仔细检查,我发现变量 lua sees 实际上是真正的 clr 类型,因为 lua 的 str 函数显示了完整的类型限定符,如 .net 中所示。但是,type 函数返回 userdata。
我没有让整个类型对 lua 可见,而是尝试使用名称创建一个 lua 表,然后添加键值对,其中键是方法名称,值是静态对象的方法,如返回通过 typeof(thing).GetMethod(MethodName) 强制转换为 LuaFunction 类型。这在一定程度上奏效了,尽管它很快对我来说太复杂和难以承受,所以我停止使用这种方法,因为我的代码库非常复杂。
我尝试的另一件事是为静态对象制作代理对象,其中实际上没有什么是静态的,即使这些方法返回 void 并作用于静态属性。
再一次,这有点工作,但是当静态方法的规范是 object.thing 时,我必须使用 object:thing。如果我尝试使用 object.thing 表示法,我会得到一个很长的错误,尽管我确信它的内容与手头的问题无关,所以不会在这里包含它。
结论
所以,正式地,我尽我所能,甚至在这里搜索,看看我是否能找到任何启发我的东西,但不幸的是没有运气。现在,你推荐我用什么?有什么我忽略的地方吗?
c# - 如何从 Lua 调用 C# 委托,委托可以抛出异常
在基于 Linux 的 docker 映像中运行以下代码会导致 CLR 崩溃。
难道我做错了什么?
Dockerfile 是 Visual Studio 的默认建议,进程是从 Visual Studio 启动的。
在 Docker 之外运行程序,即。在 Windows 主机上,按预期工作。(命中 catch 块并且不会导致 CLR 上的致命情况)
将调用包装在 apcall
中并不能解决问题。
可以通过注册函数而不是发送委托来避免这个问题。如果委托没有抛出异常,它将按预期调用。
图片中的控制台日志;