在Lua中,__index元方法可以是函数或表引用。因此,以下构造是等效的:
似乎baz的实现会更慢一些,但是有多慢呢?我并不关心具体实现上的差异,我想知道的是相对差别。是线性增长、一个数量级还是几个数量级?为了更好地理解,我正在开发一个面向对象库middleclass,在大多数情况下(95%)使用表就足够了。但是有一种特殊情况需要使用函数。了解差异将帮助我决定是否将库分成两部分(一个快速且覆盖95%的用例,另一个模块则针对其余部分使用函数),或者放弃表选项而选择函数。这个特定的__index被广泛使用(每次调用实例方法时都会使用)。如果有帮助的话,我将使用非常小的函数,类似于这个:
非常感谢。
foo = { a=1, b=2, c=3 }
bar = setmetatable({}, {__index = foo})
baz = setmetatable({}, {__index = function(_,x) return foo[x] end })
print(bar.a) -- 1
print(baz.b) -- 2
似乎baz的实现会更慢一些,但是有多慢呢?我并不关心具体实现上的差异,我想知道的是相对差别。是线性增长、一个数量级还是几个数量级?为了更好地理解,我正在开发一个面向对象库middleclass,在大多数情况下(95%)使用表就足够了。但是有一种特殊情况需要使用函数。了解差异将帮助我决定是否将库分成两部分(一个快速且覆盖95%的用例,另一个模块则针对其余部分使用函数),或者放弃表选项而选择函数。这个特定的__index被广泛使用(每次调用实例方法时都会使用)。如果有帮助的话,我将使用非常小的函数,类似于这个:
function __index(t,x) return foo[x] or bar[x] end
非常感谢。