Lunatic Python:Lua里面Python,和Lua里面的Python

2021-04-04 06:48:02

与Python不同,Lua没有模块没有默认路径。因此,Lunatic Python的真实LUA模块的默认路径与Python模块一起,并且提供了Python.lua存根。此存根必须放在Lua Require()机制可访问的路径中,并且一旦导入,它将定位真实模块并加载它。不幸的是,有些关于我们关于导入外部共享对象的LUA系统的目的的轻微不便。 LoadLib()函数的硬编码行为是加载共享对象而不导出其符号。这通常不是Lua World中的问题,而是我们在这里略高于他们的平常要求。我们将Python解释器加载为共享对象,并且Python解释器也可以加载自己的外部模块,也可以编译为共享对象,这些内容也希望将其链接回Python解释器中的符号。幸运的是,修复这个问题比解释问题更容易。它只是一个替换Lua rua分布的LoadLib.c文件中的r rld_now的问题,由' rtld_now | rtld_global rtld_global。这将避免"未定义的符号"最终可能发生的错误。以下是Python模块中可用功能的描述。此函数将在Python解释器状态内执行给定语句。示例:此函数将评估Python解释器状态内的给定表达式,并返回结果。它可以用于从Python解释器状态获取任何对象。示例:从解释器状态返回Python全局范围字典。示例:从解释器状态返回Python本地范围字典。示例:从解释器状态返回Python内部模块字典。示例:导入并返回给定的Python模块。示例:返回带有属性访问学科的给定Python对象的副本。例子:> dict = python.eval(" {}")> = dict.keysnil> dict.keys = 10>打印(DICT ["钥匙"])10和gt; = dict {' keys&#39 ;: 10}> = dict.keys = 10n.asattr(dict)> = dict.keysfunction:0x80fa9b8> = dict.keys()['键']

返回带有索引访问学科的给定Python对象的副本。例子:>缓冲= python.eval("缓冲区(' foobar')> =缓冲区[0] stdin:1:python对象actack回溯中的未知属性:[c]:? STDIN:1:在主块[c]:?>缓冲= python.asindx(缓冲区)> =缓冲器[0] f

返回包含在LUA函数闭合中的给定Python对象的副本。这对于在需要Lua函数的地方使用Python Callable实例非常有用。 Python方法和函数自动转换为Lua函数,并且不需要明确转换为Don'例子:> python.execute("类加入:\ n def __call __(self,* args):\ n返回' - ' .join(args)")>加入= python.eval("加入()")> =加入< __主__。加入实例在0x403a864c>> =加入(' foo''酒吧和#39;)foo-bar> = table.foreach({foo ='酒吧'},加入)stdin:1:坏参数#2给`foreach' (函数预期,get userdata)堆栈回溯:[c]:在功能`中的foreach' STDIN:1:在主块[c]:?> = table.foreach({foo =' bar'},python.asfunc(加入))foo-bar