-
lua中对int64的使用
案例16讲的是lua中对int64的使用。lua5.1.x都是不支持int64和uint64的。Lua5.3已经支持了这两种数据类型。lua片段中有一些对int64进行处理的函数:
a、int64.tonum2(x) tonum2会返回两个数,第二个数高位是右移32位的值,第一个数低位是剩下的值(&0xFFFFFFFF)。
b、int64.new(low,high) 创建一个int64的使用高位+低位的方式
c、int64.new(x) 创建一个int64
d、int64.equals(x,y) 判断两int64是否相等
所谓的高位低位是值得int64的前32位和后32位。
-
在lua中使用继承
案例17讲解的是在lua中实现类的继承。lua是没有类的概念的,但是通过合理的使用lua的元表,可以模拟类的一些相关特性。可以参见我之前的文章(点击此处)。
在lua片段中,创建一个空表LuaTransform,然后在这个表中设置一个方法Extend。该方法的参数是transform对象,方法中使用tolua.setpeer扩展包装transform,能够提升性能(关于该方法的解释,可以参考这篇文章)。方法内部创建了一个空表t,同时为该表设置了set和get访问器,以及__index元方法(index元方法是本身,会在自身进行查找)

从上面的表中的定义可以看出,后面的方法get.position和set.position及时t的set和get访问器。
第2个方法是个测试方法,内部测试了20W次transform的赋值所需要的时间,测试了重写方法和比较方法。
C#部分也同样有一个20W次的tansform的赋值测试时间,用于和在lua中所需要的时间做比较。实际测试,lua会慢10毫秒左右。
本例中,继承的实现就是用自定义的变量继承transform的方法,所使用的方法就是tolua.setpeer,本质上是将变量t设置成transform的替身,在获取transform的属性时,会通过在t中查找,找不到就回去虚拟栈中查找。这里的继承,并非通常意义上使用lua模拟类来实现继承的方法,会更复杂一些。