vimfung
vimfung
任何非ExportType对象传到lua都会被会以userdata包装,如果不在lua中进行原生对象的操作,仅仅作为传递对象使用的话,这样是可以的。
如果出现nil就是不正常的,我先看看是什么问题
你好,这个问题我测试了一下并没发现存在问题,能告诉我具体你的代码和系统版本吗?以下是我测试的代码片段: ``` _luaContext.setGlobal("nativeObject", new LuaValue(new Object())); _luaContext.evalScript("print(nativeObject);"); LuaValue objValue = _luaContext.getGlobal("nativeObject"); Log.v("lsc", objValue.toObject().toString()); ``` 输出是没有问题的 ``` 05-10 09:10:08.171 3589-3589/cn.vimfung.luascriptcore.sample I/luascriptcore: _ObjectReference_: 0x7089ed5ebf48 05-10 09:10:08.172 3589-3589/cn.vimfung.luascriptcore.sample V/lsc: java.lang.Object@1c846bd ```
请问您说的调用是怎么调用呢?如果是要调用FreeSpace里面的属性或者方法是必须要实现LuaExportType的,如果仅仅是作为参数传递是没有问题的。例如在原生层registerMethod一个方法,然后把这个F传入这个方法是可行的。
Thank you very much for your suggestion, I will learn about it.
第一种方法是可行的,如果参数参数是基础类型,那么可以直接通过拼接脚本的形式来传递参数,如果是要传递原生对象则此方式行不通。可以调整为下面方式: ``` LuaValue obj = _luaContext.evalScript("App"); LuaFunction func = _luaContext.evalScript("App.onCreate").toFunction(); func.invoke(new LuaValue[]{obj, new LuaValue(1024)}); ```
LSC可以实现热更新,但是需要你自己做以下的工作: 1、准备热更的服务器,从服务端下载热更的Lua脚本,覆盖应用本地的lua脚本。 2、Lua层能调用的原生操作需要自己考虑暴露哪些(JSPatch基本通过反射实现,LSC中必须指定导出接口,当然你也可以使用LSC模拟反射接口) 基本思路就是服务端下载lua脚本覆盖本地lua,LSC没有提供完整的热更方案。
lsc库是直接通过通过c api把标准库加载好的了,你只要在需要的地方required就好。至于如何执行lua文件,我的sample里面有可以参考一下,他是放到assets里面的,如果是动态执行lua文件的话,你可能要用evalScriptFromFile方法了
是哪个版本呢?