lua虚拟机从一个表中查询数据的过程:

  • 如果查询对象是表,则尝试根据key在表中查询数据,若有则返回结果;若结果为空,且无__index成员,则返回空结果;若结果为空且有__index,则设查询对象为__index,进行下一层深度的查找;
  • 若查询对象不是表,则尝试获取对象的metatale["__index"](usedata可能有此成员),设为查询对象并进行下一层深度的查找;
  • 逐层深度向下查找,但有层数限制,超过则终止查找。

由这条特性,我们可以用lua表来实现面向对象,最简单的是将__index指向基类,另一种方法是在实例化对象时直接将基类的成员深拷贝给子类。两种不同方法的差别显而易见:前者不宜多层继承,否则查找成员时一层层找增加额外开销;后者提高了查找效率,但在实例化时会有额外的开销。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐