le(a, mt) –关联元表
setmetatable(b, mt) –关联元表
到此,变量a,b都已经有了元方法”+”.当执行c = a + b时,c是与a具有相同结构的表,但注意变量c是没有元方法”+”.在实际测试中,变量a,b只需要一个具有元方法就可以进行”+”这个操作,但如果a,b都没有元方法”+”,那结果就会报错.
其时以上过程,我们可以更简化一些,先编写好元方法,同时变量也可以用函数返回值的方式创建,同时在函数内部完成变量结构,以及元表的关联.
可以通过getmetatable查看关联的元表,通过semetatable关联元表,这个函数都定义在_G中,属于Lua预定义的函数.
__index:对表的操作,如果元方法不存在,或访问的元素不存在,都会查找默认的元方法__index,如果__index为nil,返回nil,否则调用__index.如果__index是一个表,就会在这个表中查找元方法.找到就会调用,否则返回nil.同样__index下还可以继续有__index.还有一种情况是,
如果不希望访问__index,可以使用rawget来实现.
__newindex:如果是对表中的元素进行赋值操作,默认情况下如果元素不存在就会在表中增加这个元素.__newindex会在这种情况下代替默认操作.
11,继承
明白过程及原理,但只是生硬的套用理论,没有真正理解.