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
模块的约定为';s C部分,Lua部分_Lua - Fatal编程技术网

模块的约定为';s C部分,Lua部分

模块的约定为';s C部分,Lua部分,lua,Lua,在我的应用程序中,大多数模块不是纯Lua或纯C,而是混合的 我想知道这类模块的推荐“布局”是什么 到目前为止,我发现了两种方法: 该模块使用c模块的名称“posix_c”。用户不应该使用此模块。Lua模块,简称为“posix”,导入(并扩充)这个模块 窗口管理器将模块的C部分导出到全局命名空间。由于此名称不在包中。已加载,因此Lua模块可以具有相同的名称 你推荐什么方法?还有其他方法吗?如果用户不应该使用某些东西,那么应该将其隐藏:要么在注册表中,要么完全隐藏在Lua模块的upvalue中。这适

在我的应用程序中,大多数模块不是纯Lua或纯C,而是混合的

我想知道这类模块的推荐“布局”是什么

到目前为止,我发现了两种方法:

  • 该模块使用c模块的名称“posix_c”。用户不应该使用此模块。Lua模块,简称为“posix”,导入(并扩充)这个模块

  • 窗口管理器将模块的C部分导出到全局命名空间。由于此名称不在
    包中。已加载
    ,因此Lua模块可以具有相同的名称


  • 你推荐什么方法?还有其他方法吗?

    如果用户不应该使用某些东西,那么应该将其隐藏:要么在注册表中,要么完全隐藏在Lua模块的upvalue中。这适用于从Lua到C的调用。对于从C到Lua的调用,唯一的选项是registry,但如果需要,可以以非冲突的方式使用它,如下所述

    由于它是你的应用程序,你可以简单地依赖注册表本身。在我的应用程序中,我在其中注册了内部C函数,并从Lua端分配Lua回调。例如,我的Lua核心脚本的一个开始就是
    localinternal=debug.getregistry()
    。加载所有核心脚本后,我可以进行沙箱处理,禁用常规脚本对调试库的访问等


    如果您想创建一个独立的模块,我建议您创建一个C模块,在加载时调用Lua脚本,并将“隐藏”表传递给它。对于从C到Lua的调用,C代码可以使用模块中任何变量的地址作为light userdata键,将“隐藏”表存储在注册表中。

    谢谢。这不是我一直在等待的答案,但我想没有“正确”的答案。我最终选择了
    posix
    模块使用的技术。