面向对象的lua sans底层关联容器机制

时间:2011-11-23 14:08:16

标签: oop optimization lua

通过利用lua表构造的数组部分,是否有任何语法糖可以使用面向对象的lua?

-- foo_index == number
local foo_index = global_bar_object_prototype.foo; 
bar[foo_index]("hello world"];

--vs.
-- file 2 bar.foo type == function
bar.foo("hello world");

-- both versions call the same function with the same input

我希望luajit可以进行inter chunk字符串实习以优化/缓存字符串密钥访问,从而为其提供类似数组的访问特性。然而,我的天真基准证明了这一假设。我希望我的基准逻辑能够得到满足,在这种情况下,我不需要寻找语法糖。

使面向对象lua的习语具有O(1)(函数查找)特性,以实现高性能脚本编写目的?我确信游戏界面程序员已经亲眼目睹了这些。

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解这个问题,但如果您在询问是否有办法将条形图表定义为对象,那么

bar[foo_index]("hello")

会起作用,是的有一种方法:bar的metatable应该定义__index,这样它可以将整数作为键并返回相关的方法。在“构造函数”栏中的某处,您可以定义索引到“方法”的映射; __index将查看该映射并返回该函数。

您可能还会添加一个方法,该方法将获取方法名称并返回相应的索引,因此调用者不必知道映射构造函数创建的内容:

foo_index = bar.getMethodIndex('foo')
bar[foo_index]("hello")

lua允许的另一个优化是

foo_meth = bar.foo
foo_meth(bar, "hello")