<div class="markdown-body">
  <ul>
  • Lua快,LuaJIT更快
  • 用源码的方式安装LuaJIT 2.1版本,虽然是beta版本,但是比正式版本的2.0的效率高
  • 安装好Lua后运行ln -sf luajit-2.1.0-beta1 /usr/local/bin/luajit才能在命令行使用luajit命令
  • type()方法显示变量类型
  • nil表示空类型
  • boolean:0和false为假,其他为真
  • 除单引号、双引号外可以用长括号的方式定义字符串,[[0级,[=[1级,[==[2级
  • 字符串会内化(intern),值相同的字符串存储在相同的地址中,比较两个字符串值是否相同即比较他们的地址是否一致
  • 函数也是一种数据类型,有名函数的定义本质上是匿名函数对变量的赋值
  • ^指数
  • ~=不等于
  • a and b a为nil返回a,否则返回b
  • a or b a为nil返回b,否则返回a
  • 不要在循环中进行大量的字符串的拼接,会生成很多新的字符串,用table和table.contact代替,或使用table.new
  • ..用来进行字符串的拼接
  • elseif和else if不同,else if表示在else中嵌套了if
  • while语句有break,没有continue;没有do-while,有repeat
  • repeat-until直到条件为真时结束
  • for var=begin,finish(,step) do step可省略,默认为1,不想设置上限时,可以让finish=math.huge
  • for i,v in ipairs(array) do 通过迭代器ipairs遍历数组中的值
  • 其他迭代器包括:io.lines迭代文档中的每行;pairs迭代table元素;string.gmatch迭代字符串
  • ipairs()可以被JIT编译,pairs()只能被解释执行。在性能敏感的场景,避免对表遍历
  • return只能写在语句块的最后,一旦执行了return语句,该语句之后的所有语句都不会再执行
  • 全局变量会污染全局变量空间,有性能损耗,尽量使用局部变量和局部函数:local