LuaJava错误处理中的错误

2023-12-13

我正在尝试使用 LuaJava 从 Java 调用一个简单的 Lua 函数。 计算.lua:

function foo(n) return n*2 end

这就是 calc.lua 中的全部内容以及来自命令行工作的后续调用。

这是总是有错误的调用:

L.getGlobal("foo");     
L.pushNumber(8.0);
int retCode=L.pcall(1, 1,-2); // retCode value is always 5 pcall(numArgs,numRet,errHandler)
String s = L.toString(-1);     // s= "Error in Error Handling Code"

我也尝试过
L.删除(-2); L.插入(-2);

不知道为什么它会给出任何错误或者错误是什么。也许我没有正确设置错误处理程序?那么它不拨打电话吗?加载后,我从控制台尝试并可以运行 print(foo(5)) 按预期返回 10 。

更新:看起来我需要在堆栈上提供一个错误处理程序。这种错误处理程序的签名是什么以及如何将其放置在堆栈上的某个点上。谢谢


这取自 Lua 参考手册——在C API 部分它是这样描述 pcall 的:

当您使用 lua_call 调用函数时,被调用函数内的任何错误都会向上传播(使用 longjmp)。如果你需要处理错误,那么你应该使用 lua_pcall:

  int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc);

...

如果errfunc为0,则返回的错误信息正是 原始错误消息。否则,errfunc 给出堆栈索引 错误处理函数。 (在当前的实现中,该索引 不能是伪索引。)如果出现运行时错误,该函数 将被调用并显示错误消息,其返回值将是 lua_pcall 返回的消息

因此,假设 LuaJava 的 API 只是镜像 C API,那么只需传递 0 即可表示没有特殊的 errfunc。像这样的东西应该有效:

int retCode = L.pcall(1, 1, 0);
String errstr = retCode ? L.toString(-1) : "";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LuaJava错误处理中的错误 的相关文章

  • 了解静态链接嵌入式lua环境中lua扩展dll的构建/加载

    我有一个相对复杂的 lua 环境 我试图了解以下内容如何工作 起始设置包括以下两个模块 主要应用 无lua环境 DLL 静态链接到lua lib 包括解释器 该 dll 被加载到主应用程序中 并运行 lua 控制台解释器和可从控制台访问的
  • Lua中如何获取目录列表

    我需要 LUA 中的目录列表 假设我的目录路径为 C Program Files 我需要该特定路径中所有文件夹的列表以及如何搜索该列表中的任何特定文件夹 Example 需要路径 C Program Files 中所有文件夹的列表 以下是上
  • 使用 corona sdk 验证电子邮件地址

    在我的项目中 有一个供用户填写详细信息的表单 其中有一个文本字段用于输入用户的电子邮件 ID 所以我需要在 corona 项目中验证该文本字段中的电子邮件 试试这个正则表达式 local email email protected cdn
  • C 的哪些部分最可移植?

    我最近读到了 Lua 联合创始人 Luiz H de Figueredo 和 Roberto Ierusalimschy 的采访 他们讨论了 Lua 的设计和实现 至少可以说这是非常有趣的 然而 讨论的一部分让我想起了一些事情 Robert
  • 用于嵌入式服务器的 Web 技术

    我最近开始了一个针对嵌入式设备的新 Web 开发项目 并希望征求一些有关使用技术的建议 该设备将提供 HTML 页面 其中包括用于从 JSON 服务器检索数据的 AJAX 代码 我们暂时使用 Cherokee 作为 Web 服务器 但我们并
  • corona sdk中拖动物理对象

    我尝试在场景中拖动重力 0 0 的动态主体 我有一个主体类型为动态的正方形 以及一个主体类型为静态的图像 但是当将方形拖动到图像上时 它会产生一点力 但是可以超出图像并传递到另一边 如图所示 这是我拖动正方形的代码 local functi
  • Lua中如何获取表中的最大整数?

    Lua中如何获取表中的最大整数 在Lua 5 1及更早版本中 你可以使用 math max unpack 1 2 3 4 5 这受到Lua堆栈大小的限制 在 PUC Lua 5 1 上 该值的最大值可达 ca 8000 个数字 如果堆栈空闲
  • 使用 FastCGI 运行 Lua 脚本

    我目前正在尝试找出使用 FastCGI 与 lighttpd 或 Nginx 一起运行 Lua 脚本的方法 我唯一能挖到的是WSAPI http keplerproject github com wsapi 开普勒计划的一部分 但我想知道是
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • LuaJ 导入 Lua 方法

    我正在使用 LuaJ 并且我有一个 lua文件充满了一堆函数 如何通过 LuaJ 导入这些函数以在 Java 中使用 一种选择是将文件编译为 Java 代码并导入它 另一种方法是使用可嵌入解释器直接从 Java 代码中调用 Lua 文件 E
  • gsub 的转义字符串

    我读了一个文件 local logfile io open log txt r data logfile read a print data output n w r 1 2 n t x re S 是的 日志文件看起来很糟糕 因为它充满了各
  • Lua表在内存中是如何处理的?

    lua如何处理表的增长 是否相当于ArrayList在Java中 IE 需要连续的内存空间 并且当它变得大于已经分配的空间时 内部数组被复制到另一个内存空间 有什么聪明的方法来引导吗 我的问题是 表是如何存储在内存中的 我不是问如何在 Lu
  • 克隆一个lua状态

    最近 我在使用C 和Lua进行开发时遇到了很多困难 我的情况是 由于某种原因 我的 C 程序中可能有数千个 Lua 状态 但这些状态在初始化后应该是相同的 当然 我可以为每个状态执行 luaL loadlibs 和 lua loadfile
  • Tarantool 中的冲突解决(如何在发生冲突时修复主-主模式下的复制)

    在多master场景下使用Tarantool如何实现冲突解决 我正在开发一项应该具有高可用性的服务 因此决定使用 nginx 作为 tarantool 两个节点 禁用只读选项 的负载均衡器 带有备份指令 它会重试对其他节点的失败请求 但如果
  • Lua(命令行)执行后保持打开状态

    我已经广泛寻找这个但我似乎找不到它 有什么方法可以执行Lua通过双击脚本 在中执行它 Lua Command Line 并在执行后保持打开状态 例如 print Hello World 该代码可以编译并运行 但是如果我双击hello lua
  • 在 Lua/LuaFileSystem 中创建一个新文件

    我已经查看了 Lua 和 LuaFileSystem 文档 但尚未找到创建新文件的方法 我也在这里四处寻找 但目的相同 请注意 我正在寻找的解决方案必须与操作系统无关 以确保可移植性 但我很高兴针对不同的系统获得不同的答案 示例 将 Hel
  • 如何将 Lua 粘合到 C++ 代码?

    您使用 Luabind toLua 或其他库 如果使用 是哪一个 还是根本不使用 每种方法都有哪些优点和缺点 我不太同意 自己投票 将基本类型和静态 C 函数绑定到 Lua 是微不足道的 是的 但是当你开始处理表和元表时 情况就会发生变化
  • 在 Lua 中更改元表会破坏冒号运算符

    在学习Lua的过程中 我借用了一些代码here http lua users org wiki StringIndexing使用字符串索引 正是这样 getmetatable index function str i return stri
  • 如何在 Lua-C API 5.2 中创建类对象?

    我正在使用 Lua 封装 C 函数 使用 Lua 5 2 的 Lua C API include
  • 使用 luasocket smtp 和 ssl 发送电子邮件

    我一直在尝试使用帖子中描述的代码发送电子邮件 lua使用gmail账户发送邮件 https stackoverflow com questions 11070623 lua send mail with gmail account 代码由米

随机推荐

  • 使用 JavaScript 删除字符串、将数字保留在数组中

    其他文章讨论根据搜索词从数组中删除字符串 但我试图确定数组中哪些元素是字符串 哪些元素是数字 然后删除所有字符串以返回一个新数组 function filter list l let newArray for let i 0 i lt l
  • 如何在vue js中使用Filepond并使用axios上传文件?

    我需要使用 axios 发送 post 请求 以便使用 Filepond Uploader 上传文件 我该怎么做 我正在使用如下所示的自定义进程处理程序 但它不起作用 processHandler fieldName file metada
  • 使用模板 10 进行依赖注入

    我正在尝试将一些代码从我使用 Prism Unity 开发的旧 Windows 8 1 应用程序迁移到使用 Template 10 和 Unity 的新 UWP 应用程序 我在模板10的文档中看到here你能行override the Re
  • 如何通过 Firebase 管理员通过代理连接到 Firebase?

    目前 我正在使用 Firebase Admin SDK 连接 NodeJS 服务器端应用程序中的 Firebase 数据库 但我没有找到通过代理设置连接 Firebase 的选项 或者它可以检测我的系统HTTP PROXY环境变量 当我运行
  • 控制android中的后退“按钮”

    我想从子活动中获取文本数据值 一切都很好 但是当子活动打开时 我只需单击手机上的后退 按钮 就会抛出异常错误 我在 android NotePad 生命周期控制 toturial 上找到了它 但它很难理解 有人能帮我吗 这是我的代码 pub
  • Entity Framework Core:在 WebAPI 中包含多对多相关对象

    我对 NET 框架不太熟悉 但决定尝试一下 ASP NET Core 和 EF Core 我想制作一个非常简单的 Web API 后端 但在处理多对多关系时遇到问题 我知道我需要为两个实体创建一个关系表 如本文中的示例所示 如何与 EF C
  • 正则表达式 - 超过 10 个字符

    如何指示需要超过 10 个字符的正则表达式 我知道 大于 0 大于 1 但是要求大于 10 的语法是什么 谢谢大家 您使用大括号表示法 例如 正则表达式a 10 将匹配 10 个或更多a人物 a 10 20 将匹配至少 10 个且不超过 2
  • 什么是 REST 资源?

    什么是 REST 资源以及它们与资源名称和资源表示有何关系 我读了一些关于这个主题的文章 但它们太抽象了 让我比以前更加困惑 以下 URL 是资源吗 如果是 该资源的名称是什么以及它的表示形式是什么 URL 的 GET 响应应类似于 id
  • 限制 iPhone 应用程序对服务器的访问

    我正在构建一个客户端 服务器 iPhone 游戏 我希望阻止第三方客户端访问服务器 这有两个原因 首先 我的收入模式是出售客户并赠送服务 其次我想避免促进作弊的客户激增 我正在用 Rails 编写服务器的第一个版本 但我正在考虑在某个时候迁
  • Xamarin,使用 Xlabs 示例中的地理定位

    使用 Xamarin 共享项目 我尝试在我的共享项目中包含 Xlabs 示例中的地理位置功能 但在调用 dependencyService 时遇到问题 我有一个内容页面 其中有我的按钮 其中包含如下命令 Command new Comman
  • Chrome 驱动程序无法在 Azure Web 应用程序上运行

    我使用过 NetCore2 App 并尝试截取给定 URL 的屏幕截图 它在本地运行完美 但部署到 Azure 后在创建 Webdriver 时出现问题 at OpenQA Selenium DriverService ctor Strin
  • LNK1120:1 个未解析的外部和 LNK2019:未解析的外部符号

    我遇到了这两个错误 但似乎找不到有效的解决方案 LNK1120 1 个未解析的外部 错误1错误LNK2019 无法解析的外部符号 public thiscall Vector3D Vector3D class Vector3D const
  • 如何在空手道中将驱动程序上下文从 Android 切换到 webview

    我正在开发一个使用空手道和 appium 自动化移动应用程序的项目 我正在开发的应用程序似乎是一个混合应用程序 当我启动应用程序时 它会将我重定向到要登录的 Web URL Web 浏览器 并且我的空手道测试无法找到登录页面下存在的元素 F
  • StreamGroup.merge 仅重新调整一个流

    我显然误解了如何StreamGroup merge工作原理或流如何工作或两者兼而有之 我有两个流正在查询 firestore 中的同一字段 我正在使用合并来创建一个名为mergedStream 这在 StreamBuilder 中用于为应用
  • 如何根据源字典中值的笛卡尔积创建字典列表(“分解”字典)?

    给定一个看起来像这样的字典 Color Red Yellow Size Small Medium Large 如何创建结合第一个字典键的各种值的字典列表 我想要的是 Color Red Size Small Color Red Size M
  • 同一个应用程序的不同子域可以防止XSS等恶意攻击吗?

    在我的 Rails 应用程序中 我有 2 个子域 one 会员 myapp com这是之间共享的区域所有成员 他们可以登录并管理他们的帐户 二 每个成员在子域上都有自己的网站 如下所示 会员1 myapp com member2 myapp
  • 使用computeSpectrum()返回FFT值进行基音检测

    我正在使用 Actionscript 3 0 for Flash Player 10 3 进行开发 我在用着计算频谱 在加载的 mp3 上 运行 Event ENTER FRAME 以获取 byteArray 中每个样本的快照 ByteAr
  • 如何使用联接更新 DB2 表?

    我有两个表 我想通过加入它们来更新 我使用的是 DB2 V9 7 订单批准 ORDER ID CREATED BY ID CREATED BY NAME PROCESS DT 234 2 admin null 307 2 admin nul
  • 使用 IPython 作为有效的调试器

    如何在我的代码中嵌入 IPython shell 并拥有它自动显示行号 and function它在哪里被调用 我目前有以下设置来将 IPython shell 嵌入到我的代码中 from IPython frontend terminal
  • LuaJava错误处理中的错误

    我正在尝试使用 LuaJava 从 Java 调用一个简单的 Lua 函数 计算 lua function foo n return n 2 end 这就是 calc lua 中的全部内容以及来自命令行工作的后续调用 这是总是有错误的调用