LuaValue
所有的Lua数据类型的操作都是围绕着LuaValue组织起来的,LuaValue暴露了用于Lua计算的主要接口。
LuaValue对象用来表示Lua中的基本数据类型,比如:nil,number,string,table,userdata,function等。需要注意LuaValue也表示了Lua语言中的函数。所以Luaj中Lua语言的函数操作都是通过LuaValue来实现的。
Globals
旧的platform的概念已经被globals所取代。Globals类有执行闭包所需要的所有状态,并且为编译和加载脚本提供了方便的函数。
Globals继承自LuaTable,而LuaTable继承自LuaValue,``
LuaTable
Lua中table如果用作数组的话,索引是从1开始的,这点需要额外注意。在Java中赋值时如果以0作为索引的起始值,那么在Lua中使用#table这种方式获取到的长度则为数组长度-1。
线程安全
Luaj3.0可以多线程运行,但是有以下限制:
- 客户端代码生成的每个线程都必须有他自己的、不同的
Globals实例。 - 每个线程都不可以访问其他线程的
Globals实例(全局变量)。 - 数字、字符串、线程、函数、布尔值和和
Nil的元数据都是共享的,因此在任何线程中运行Lua代码时时都不应该进行修改。
作为一种替代方法,可以使用JSR-223脚本接口,并且应该通过在内部使用ThreadLocal为每个脚本引擎实例提供一个单独的Globals实例。
Luaj直到代码运行结束前都会阻塞线程,这时候开启一个新的线程专门运行即可,但是LuaJ运行以后无法中断(即使你中断了它所在的线程),比如你的.lua中有一个while true do end循环,那么你将永远无法中断它,除非退出你的整个Java应用。(此段copy,未经试验)
参考资料
- 《从零开始搭建游戏服务器》Java与Lua互相调用
最后
以上就是淡定板凳最近收集整理的关于Luaj-04-重点概念与数据类型的全部内容,更多相关Luaj-04-重点概念与数据类型内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复