Xiayf的技术笔记

Lua

  • 布尔类型只有nilfalse是false,其他的如数字0''空字符串('\0')都是true。
  • Lua中的变量如果没有特殊说明,全是全局变量,那怕是语句块或是函数里。变量前加local关键字的是局部变量。
  • Lua没有++或是+=这样的操作
  • Lua中不等于是~=,而不是!=
  • 字符串的拼接操作符是..
  • 条件表达式中的与或非为分是:and, or, not关键字。
  • Lua中数组(也是table)的下标是从1开始的!
  • 若变量arr是数组,那么#arr即数组的长度
  • Lua中的变量,如果没有local关键字,全都是全局变量,Lua也是用table来管理全局变量的,Lua把这些全局变量放在了一个叫_G的table里。
  • 遍历table T
for k, v in pairs(T) do
    print(k, v)
  • metatable 和 metamethod;setmetatable、getmetatable;Lua内建约定的metamethod有:

    • __add(a, b) 对应表达式 a + b
    • __sub(a, b) 对应表达式 a - b
    • __mul(a, b) 对应表达式 a * b
    • __div(a, b) 对应表达式 a / b
    • __mod(a, b) 对应表达式 a % b
    • __pow(a, b) 对应表达式 a ^ b
    • __unm(a) 对应表达式 -a
    • __concat(a, b) 对应表达式 a .. b
    • __len(a) 对应表达式 #a
    • __eq(a, b) 对应表达式 a == b
    • __lt(a, b) 对应表达式 a < b
    • __le(a, b) 对应表达式 a <= b
    • __index(a, b) 对应表达式 a.b
    • __newindex(a, b, c) 对应表达式 a.b = c
    • __call(a, ...) 对应表达式 a(...)
  • require函数,载入同样的lua文件时,只有第一次的时候会去执行,后面的相同的都不执行了(说明模块加载有缓存);如果要让每一次文件都会执行,可以使用dofile("module_name")函数;如果想载入后不执行,等需要的时候再执行,可以使用loadfile("module_name")函数。

推荐资源