元表概念:
引言:Lua中的每个值都有一套预定义的操作集合,如数字相加等。但无法将两个table相加,此时可通过元表修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定操作。
访问机制:一般的元方法都只针对Lua的核心,也就是一个虚拟机。它会检测一个操作中的值是否有元表,这些元表是否定义了关于次操作的元方法。例如两个table相加,先检查两者之一是否有元表,之后检查是否有一个叫“__add”的字段,若找到,则调用对应的值。“__add”等即时字段,其对应的值(往往是一个函数或是table)就是“元方法”。
eg:
--定义元组 tab = {} function String( str ) --增加元组方法value为返回参数字符串 return setmetatable( {value = str or ''}, tab ) end function tab.__add( a, b ) --定义元组方法add为返回两元组联合 return String( a.value..b.value ) end m = String( "hello " ) n = String( "world!" ) print( (m+n).value )