table的元表提供了一种机制,可以重定义table的一些操作。
之后我们会看到元表是如何支持类似js的prototype行为。
如果在table中直接查找key失败,会使用元表的__index 继续查找,并且是递归的查找
__index的值也可以是函数function(tbl, key) ,这样可以支持更多的自定义的查找。
__index、__add等等,被称为元方法。
这里是table的元方法的全部清单:
-- __add(a, b) for a + b
-- __sub(a, b) for a - b
-- __mul(a, b) for a * b
-- __div(a, b) for a / b
-- __mod(a, b) for a % b
-- __pow(a, b) for a ^ b
-- __unm(a) for -a
-- __concat(a, b) for a .. b
-- __len(a) for #a
-- __eq(a, b) for a == b
-- __lt(a, b) for a < b
-- __le(a, b) for a <= b
-- __index(a, b) <fn or a table> for a.b
-- __newindex(a, b, c) for a.b = c
-- __call(a, ...) for a(...)
类风格的table和继承
类并不是内置的;有不同的方法通过表和元表来实现。
下面是一个例子,后面是对例子的解释
继承的例子:
发表评论