Lua学习

作者: 指间罅隙 | 来源:发表于2018-06-08 17:26 被阅读0次

Lua 学习

元表

  • setmetatable(table,metatable): 对指定table设置元表(metatable),如果元表(metatable)中存在__metatable键值,setmetatable会失败 。 返回 table
  • getmetatable(table): 返回对象的元表(metatable)。

__index 元方法 :访问值

Lua查找一个表元素时的规则,其实就是如下3个步骤:

  • 1.在表中查找,如果找到,返回该元素,找不到则继续
  • 2.判断该表是否有元表,如果没有元表,返回nil,有元表则继续。
  • 3.判断元表有没有index方法,如果index方法为nil,则返回nil;如果index方法是一个表,则重复1、2、3;如果index方法是一个函数,则返回该函数的返回值。

__newindex 元方法:赋予值

  • 1.索引键有值,直接赋值,该索引键没值则继续
  • 2.table不是表,或者表不存在该键值,调用table的元方法。没有元方法直接赋值。
  • 3.元方法是表,重复1,2。如果元方法是函数,则调用f(table,key,v)

__call 元方法:调用一个值时调用 xx()

   local a = { qqq = '嗯哼' }
    local mt = {}
    mt.__add = function(a, b)
        return a .. b
    end
    --t.key不存在的时候 调用
    mt.__index = function(t, key)
        if key == 'sss' then
            return "哈哈哈"
        else
            return "啪啪啪"
        end
    end
    --t.key = v 时调用
    mt.__newindex = function(t, key, v)
        --赋值方法 rawset
        rawset(t, key, v)
    end
    mt.__call = function(t,v)   
        return t.qqq .. "字符串拼接"..v
    end
    local c = setmetatable(a, mt)
    cclog("-----------a--" .. a.sss) --输出: -----------a--哈哈哈
    cclog("-----------a--" .. a.www) --输出: -----------a--啪啪啪
    cclog("-----------a--" .. a.qqq) --输出: -----------a--嗯哼
    a.sss = "我我我"
    a.www = "你你你"
    cclog("-----------c--" .. c.sss) --输出: -----------c--我我我
    cclog("-----------c--" .. c.www) --输出: -----------c--你你你
    cclog("-----------c--" ..c("星期天"))--输出: -----------c--嗯哼字符串拼接星期天

其他元函数

__add 对应的运算符 '+'.
__sub 对应的运算符 '-'.
__mul 对应的运算符 '*'.
__div 对应的运算符 '/'.
__mod 对应的运算符 '%'.
__unm 对应的运算符 '-'.
__concat 对应的运算符 '..'.
__eq 对应的运算符 '=='.
__lt 对应的运算符 '<'.
__le 对应的运算符 '<='.

相关文章

  • redisgo操作LUA脚本

    LUA脚本基础学习:LUA脚本--菜鸟教程[https://www.runoob.com/lua/lua-tuto...

  • 【译】从 JS 学习 Lua

    原文:Learning Lua/From JS 从 JS 学习 Lua 对 JavaScript 已经了解,想学习...

  • Lua 基本语法

    Lua 学习起来非常简单,我们可以创建第一个 Lua 程序! 第一个 Lua 程序 交互式编程 Lua 提供了交互...

  • 2017.5.25

    lua学习总结:数据结构: 使用Lua实现链表(单向链表和双向链表),队列 使用Lua保存图,用table保存,每...

  • lua相关学习资料收集

    lua官网:http://www.lua.org/home.htmllua学习网站:http://www.runo...

  • Lua学习

    Lua 学习 元表 setmetatable(table,metatable): 对指定table设置元表(met...

  • Lua学习

    关于luac文件:预编译并非意味着执行更快速,因为Lua中的单元总会在执行前被编译为字节码。luac只不过允许这些...

  • lua学习

    声明:这是从网上看来的,方便学习,整理到简书上的,作者还是个权戏粉,233! 正文: -- 单行注释 --[[ ...

  • Lua学习

    一、规范 1. 添加注释 单行注释 -- 多行注释 --[[ --]] 2. 标识符 不能以数字开头...

  • Lua学习

    概述 Lua是由巴西里约热内卢天主教大学(Pontifical Catholic University of Ri...

网友评论

      本文标题:Lua学习

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