美文网首页
Lua 学习笔记(metatable 与 meatmethod)

Lua 学习笔记(metatable 与 meatmethod)

作者: CoreJusidin | 来源:发表于2017-11-09 19:46 被阅读0次

    Lua中每一个值都有一套预定义的操作集合。

    table和userdate可以有个字独立的元表,而其他类型的值则共享其类型所属的单一元素。

    可以用 getmetatable 查看他的元表

        t = {}

        print(getmetatable(t))  -->nil

    可以用setmetatable(t, t1)来设置或修改任何table的元表

    在Lua代码中,只能设置table的元表。


    算术类的元方法   

        Set = {}

    function Set.new(l)

    local set = {}

    for _, v in inpairs(l) do set[v] = true end

    return set

    -- body

    end

    function Set.union( a, b )

    local res = Set.new{}

    for _ in pairs( a ) do res[_] = true end

    for _ in pairs( b ) do res[_] = true end

    return res

    end

    function Set.intersection( a, b )

    local res = Set.new{}

    for _ in pairs( a ) do

    res[_] = b[_]

    end

    return res

    -- body

    end



    关系类的元方法

    指定table的关系操作符


    table访问的元方法

    __index元方法 

        用于查询,当访问一个table中一个不存在的字段时,得到的结果为nil。这是对的,但并不是完全正确。实际上,这些访问会促使解释器去查找一个叫__index的元方法。如果没有这个元方法,那么访问结果如前述的为nil,否则,就由这个元方法来提供最终结果。

    __newindex元方法

        用于更新,当对一个table中不存在的索引进行复制时,解释器就会查找__newindex元方法。如果有这个元方法,解释器就会调用它,而不是执行赋值。如果这个元方法是一个table,解释器就在此table中进行赋值,而不是对原来的table。

    rawset

        可以绕过元方法,调用rawset(t, k, v)就可以不涉及任何元方法而直接设置table t和与key k相关的value v



    跟踪table的访问

        利用__index 和 __newindex 对table进行跟踪。

    相关文章

      网友评论

          本文标题:Lua 学习笔记(metatable 与 meatmethod)

          本文链接:https://www.haomeiwen.com/subject/ntopmxtx.html