LUA笔记

作者: 橄榄树下的托马斯 | 来源:发表于2017-05-28 11:55 被阅读0次

作者:刘宾, thomas_liub@hotmail.com
请尊重作者著作权,转载请注明出处,谢谢!


metatable

  • setmetatable(table,metatable): 对指定table设置元表(metatable),如果元表(metatable)中存在__metatable键值,setmetatable会失败
  • getmetatable(table): 返回对象的元表(metatable)
mytable = {}                          -- 普通表 
mymetatable = {}                      -- 元表
setmetatable(mytable,mymetatable)     -- 把 mymetatable 设为 mytable 的元表 
  • __index 元方法

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

    1. __newindex 元方法用来对表更新,__index则用来对表访问
    2. 以上实例中表设置了元方法 __newindex,在对新索引键(newkey)赋值时(mytable.newkey = "新值2"),会调用元方法,而不进行赋值。而如果对已存在的索引键(key1),则会进行赋值,而不调用元方法\ __newindex
  • 为表添加操作

模式 描述
__add 对应的运算符 '+'.
__sub 对应的运算符 '-'.
__mul 对应的运算符 '*'.
__div 对应的运算符 '/'.
__mod 对应的运算符 '%'.
__unm 对应的运算符 '-'.
__concat 对应的运算符 '..'.
__eq 对应的运算符 '=='.
__lt 对应的运算符 '<'.
__le 对应的运算符 '<='.
两表相加操作
mytable = setmetatable({ 1, 2, 3 }, {
  __add = function(mytable, newtable)
    for i = 1, table_maxn(newtable) do
      table.insert(mytable, table_maxn(mytable)+1,newtable[i])
    end
    return mytable
  end
})
secondtable = {4,5,6}
mytable = mytable + secondtable
    for k,v in ipairs(mytable) do
print(k,v)
end
  • __call 元方法
定义元方法__call
mytable = setmetatable({10}, {
  __call = function(mytable, newtable)
    sum = 0
    for i = 1, table_maxn(mytable) do
        sum = sum + mytable[i]
    end
    for i = 1, table_maxn(newtable) do
        sum = sum + newtable[i]
    end
    return sum
  end
})
newtable = {10,20,30}
print(mytable(newtable))
  • __tostring 元方法
    __tostring 元方法用于修改表的输出行为。以下实例我们自定义了表的输出内容
mytable = setmetatable({ 10, 20, 30 }, {
  __tostring = function(mytable)
    sum = 0
    for k, v in pairs(mytable) do
        sum = sum + v
    end
    return "表所有元素的和为 " .. sum
  end
})
print(mytable)

表赋值

  1. 初始化
a={name_1="value1", name_2="value2", ["name-3"]="value3"}
print(a.name_1, a["name_1"], a["name-3"])
  1. 单独赋值
a={}
a["name-1"]="value1"

相关文章

  • coolshell lua教程笔记

    collshell lua教程笔记 标签(空格分隔): lua todo 变量 数字 lua的数字只有double...

  • lua入门笔记 目录

    lua的中文API lua入门笔记1 类型 表达式 语句 函数lua入门笔记2 深入函数 深入函数 迭代器与泛型f...

  • 2019-01-14

    Lua与C交互学习笔记 Lua与C交互是通过虚拟栈实现的 在C中调用Lua 方法一 栈中的情况如下表所示 方法二 ...

  • Lua笔记--number的存储

    Lua 笔记--number的存储 Lua语言里面的数字类型是number,没有像C/C++里面那样多种多样,如果...

  • 2021-08-06_lua脚本学习笔记

    20210806_lua脚本学习笔记 1概述 1.1为什么lua脚本具有原子性 Redis保证以原子方式执行脚本,...

  • 2022-05-02_Lua脚本操作redis锁学习笔记

    20220502_Lua脚本操作redis锁学习笔记.md 1概述 释放锁要用 lua 脚本,把检查锁是不是本线程...

  • Lua语言笔记(为热更新做铺垫)

    [前言:很多基本的语法之类的在笔记中没有提及,需要在看之前了解一下lua基本语法] -- ======lua简单知...

  • lua入门笔记1 类型 表达式 语句 函数

    从0开始学lua,给自己记一个笔记,使用书籍 lua程序设计(第二版),电子工业大学出版社 lua的中文API) ...

  • Lua笔记--function

    Lua笔记--Function 函数定义 函数调用 省略括号 Lua函数调用其中有一个比较特别的地方:当函数只有一...

  • Lua笔记

    书:Programming in lua,2th edition 参考手册:http://www.lua.org/...

网友评论

      本文标题:LUA笔记

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