我从 C 函数读取嵌套 lua 表作为参数是否正确?

2023-12-31

我将用C语言实现一个函数,该函数将由Lua脚本调用。

这个函数应该接收一个lua表(甚至包含一个数组)作为参数,所以我应该读取表中的字段。我尝试像下面那样做,但是当我运行它时我的函数崩溃了。谁能帮我找出问题所在吗?


/*
 function findImage(options)
    imagePath = options.imagePath
    fuzzy = options.fuzzy
    ignoreColors = options.ignoreColor;
    ...
 end

 Call Example:

 findImage {
              imagePath="/var/image.png", 
              fuzzy=0.5,
              ignoreColors={
                             0xffffff, 
                             0x0000ff, 
                             0x2b2b2b
                           }
            }

 */

static int findImgProxy(lua_State *L)
{
    lua_settop(L, 1);
    luaL_checktype(L, 1, LUA_TTABLE);

    lua_getfield(L, -1, "imagePath");
    lua_getfield(L, -2, "fuzzy");
    lua_getfield(L, -3, "ignoreColors");

    const char *imagePath = luaL_checkstring(L, -3);
    double fuzzy    = luaL_optint(L, -2, -1);

    int count  = lua_len(L, -1); // how to get the member count of ignoreColor array

    int colors[count];
    for (int i=0; i count; i++) {
        lua_rawgeti(L, 4, i);
        colors[i] = luaL_checkinteger(L, -1);
        lua_pop(L, 1);
    }

    lua_pop(L, 2);

    ...
    return 1;
}


lua_len不返回任何内容,它只将长度压入堆栈。使用此代码片段获取表长度:

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

我从 C 函数读取嵌套 lua 表作为参数是否正确? 的相关文章

随机推荐

  • Java 字符串参数

    我来自 net 背景 想知道创建返回布尔值并修改通过参数传入的字符串的方法的可接受方式 我知道字符串在 Java 中是不可变的 因此下面的代码片段将始终生成一个空字符串 我只能返回布尔值 不能抛出异常 如果我需要将 String 类包装在
  • 301 重定向在 WordPress 中无法通过 .htaccess 工作

    我尝试在 WordPress 中的 htaccess 文件中应用两个 301 重定向 但收到 404 错误 这是我所拥有的 BEGIN WordPress
  • C++ 参数协方差

    我想知道为什么 C 不支持参数的协方差 如下例所示 或者是否有办法实现它 class base public virtual base func base ptr return new base class derived public b
  • C#中抽象类不能被密封?

    我在某处读过 抽象和密封修饰符相当于静态类 我还发现 当你声明一个静态类时 编译器会在内部将该类标记为抽象和密封 并在 IL 代码中创建一个私有构造函数 所以 我决定这样做 static class A public static void
  • Vue.js:vuex 操作中未捕获的承诺

    我了解 vuex actions 返回承诺 但我还没有找到处理错误的理想模式在 vuex 中 我当前的方法是在我的 axios 插件上使用错误拦截器 然后将错误提交到我的 vuex 存储 in 插件 axios js export defa
  • System.Net.FtpClient openwrite 不会上传文件,除非我在退出前插入睡眠

    我正在使用 System Net FtpClient 程序集将文件上传到测试 FTP 站点 当我运行下面的代码时 文件不会出现在远程位置 除非我按照下面的方式使用 Thread Sleep 我不想使用 using System using
  • 如何知道哪个列表项对用户可见?

    我通过我的应用程序录制了视频 并将其存储在存储卡中 在我获取这些视频并将其添加到列表视图后 根据屏幕尺寸 用户只能看到一个视频 如果用户上下滚动并停止 那时我想知道哪一个在用户面前 如果有人知道解决方案请帮助我 或任何其他方法 提前致谢 好
  • Apache Lucene TokenStream 合同违规

    使用 Appache Lucene TokenStream 删除停用词 导致错误 TokenStream contract violation reset close call missing reset called multiple t
  • Ceres Solver:无法禁用日志记录(google glog)

    我在一个项目中使用 ceres 求解器 当我调用ceres Solve函数后 库开始输出如下行 iterative schur complement solver cc 88 No parameter blocks left in the
  • 根据另一个 NSArray 字符串的排序对自定义对象的 NSArray 进行排序

    我有两个NSArray我想要以相同方式排序的对象 一个包含NSString对象 其他自定义Attribute对象 这是我的 关键 NSArray 的样子 The master order NSArray stringOrder NSArra
  • spring-boot 与 tomcat 和 cxf-servlet

    我正在尝试使用 spring boot 来建立嵌入式 Tomcat 我想在应用程序中使用 CXF 来提供一组 Web 服务 但我不知道如何建立 CXF servlet 我的主课看起来像这样 Configuration EnableAutoC
  • 在 Android 中使用相机活动

    如果您想使用使用本机 Android 相机的内置相机 Activity 只需执行以下操作即可 Intent camera new Intent MediaStore ACTION IMAGE CAPTURE this startActivi
  • 为什么我们仍然在 .NET 中使用数据集?

    数据集是 NET 1 0 中最重要的东西之一 即使现在使用 NET 3 5 我仍然发现自己必须使用它们 特别是当我必须调用一个返回数据集的存储过程时 我最终会得到该数据集手动转换为对象以使其更易于使用 我从来没有真正喜欢过数据集 并且发现它
  • django 将 .values_list('datetimefield') 转换为日期

    我想将带有日期时间对象的 value list 字段转换为日期对象 values list time finished flat True 给我 2016 03 22T18 52 53 486Z 我想要的是 2016 03 22 谢谢你 您
  • Autofac多次注册组件

    在上一个关于如何可视化依赖关系图的问题中 https stackoverflow com a 59247007 1955317我为现在用来可视化我的依赖关系图的代码奠定了基础 因为它是由 Autofac 解析的 运行代码 我得到一棵树 生成
  • 为什么java进程使用的内存比预期多得多

    系统信息 操作系统 archlinux JDK OpenJDK IcedTea 2 4 3 ArchLinux 版本 7 u45 2 4 3 1 x86 64 运行应用程序 https github com aemoncannon ensi
  • 是否可以将观察者添加到tableView.contentOffset?

    我需要跟踪 tableView contentOffset y 是否可以将观察者添加到 tableView contentOffset 我认为这是不可能的 因为 contentOffset 不继承 NSObject 类 还有其他解决办法吗
  • 将递归函数转换为异步 CPS 实现 (javascript)

    这是我的功能 function duplicate step through highlighted element jq target jq char cb console log element jq var contents elem
  • 如何在R中手动更改VisNetwork中节点的位置

    我的 VisNetwork 遇到问题 我在 R 中创建了一个图表 每次单击节点并将其移动到其他位置时 它都会回到之前的位置 是否有可能手动重新安排网络 我想将一些节点移动到其他位置或更改一些节点之间的边的长度 以便它更加透明 至少有两种可能
  • 我从 C 函数读取嵌套 lua 表作为参数是否正确?

    我将用C语言实现一个函数 该函数将由Lua脚本调用 这个函数应该接收一个lua表 甚至包含一个数组 作为参数 所以我应该读取表中的字段 我尝试像下面那样做 但是当我运行它时我的函数崩溃了 谁能帮我找出问题所在吗 function findI