• 写lua时需要注意的地方


    1. 条件语句判断时,只有false和nil会导致判断为假,其他的任何值都为真。
    2.  Lua 的字符串与编码无关; 它不关心字符串中具体内容。
    3. 标准 Lua 使用 64 位整数和双精度(64 位)浮点数, 但你也可以把 Lua 编译成使用 32 位整数和单精度(32 位)浮点数。 以 32 位表示数字对小型机器以及嵌入式系统特别合适。
    4. table 是一个关联数组, 也就是说,这个数组不仅仅以数字做索引,除了 nil 和 NaN 之外的所有 Lua 值 都可以做索引
    5. Lua 语言对大小写敏感: and 是一个保留字,但 And 与 AND 则是两个不同的有效名字。 作为一个约定,程序应避免创建以下划线加一个或多个大写字母构成的名字 (例如 _VERSION)
    6. Lua 5.3 之后支持了位运算
    7. 关于函数可返回值的数量限制和系统有关。 这个限制一定大于 1000 
    8. 当你使用 Lua API 时, 就有责任保证做恰当的调用。 特别需要注意的是, 你有责任控制不要堆栈溢出。 你可以使用 lua_checkstack 这个函数来扩大可用堆栈的尺寸。
    9. Lua 支持协程,也叫 协同式多线程。 一个协程在 Lua 中代表了一段独立的执行线程。 然而,与多线程系统中的线程的区别在于, 协程仅在显式调用一个让出(yield)函数时才挂起当前的执行。
    10. Lua 从一个对象 obj 中获取一个元方法的过程:

           rawget(getmetatable(obj) or {}, "__" .. event_name)
    11. 取长度操作符写作一元前置符 #。 字符串的长度是它的字节数(就是以一个字符一个字节计算的字符串长度)。

      程序可以通过 __len 元方法来修改对字符串类型外的任何值的取长度操作行为。

      如果 __len 元方法没有给出, 表 t 的长度只在表是一个 序列 时有定义。 序列指表的正数键集等于 {1..n} , 其中 n 是一个非负整数。 在这种情况下,n 是表的长度。 注意这样的表

           {10, 20, nil, 40}
      

      不是一个序列,因为它有键 4 却没有键 3。 (因此,该表的正整数键集不等于 {1..n} 集合,故而就不存在 n。) 注意,一张表是否是一个序列和它的非数字键无关。

    12. return functioncall 这样的调用形式将触发一次 尾调用。 Lua 实现了 完全尾调用(或称为 完全尾递归): 在尾调用中, 被调用的函数重用调用它的函数的堆栈项。 因此,对于程序执行的嵌套尾调用的层数是没有限制的。 然而,尾调用将删除调用它的函数的任何调试信息。 注意,尾调用只发生在特定的语法下, 仅当 return 只有单一函数调用作为参数时才发生尾调用; 这种语法使得调用函数的所有结果可以完整地返回。 因此,下面这些例子都不是尾调用:

        return (f(x))        -- 返回值被调整为一个
           return 2 * f(x)
           return x, f(x)       -- 追加若干返回值
           f(x); return         -- 返回值全部被舍弃
           return x or f(x)     -- 返回值被调整为一个
    13. Lua 语言有词法作用范围。 变量的作用范围开始于声明它们之后的第一个语句段, 结束于包含这个声明的最内层语句块的最后一个非空语句。 看下面这些例子:

          x = 10                -- 全局变量
           do                    -- 新的语句块
             local x = x         -- 新的一个 'x', 它的值现在是 10
             print(x)            --> 10
             x = x+1
             do                  -- 另一个语句块
               local x = x+1     -- 又一个 'x'
               print(x)          --> 12
             end
             print(x)            --> 11
           end
           print(x)              --> 10 (取到的是全局的那一个)

      注意这里,类似 local x = x 这样的声明, 新的 x 正在被声明,但是还没有进入它的作用范围, 所以第二个 x 指向的是外面一层的变量。

  • 相关阅读:
    [C#] override和overload的区别
    [ASP.Net] 20141228_Dapper文章搜集
    JSP
    Ajax使用简介
    编写JAVA脚本的JSP页面
    JAVA web开发模式
    JSP基础
    过滤器
    监听会话范围内事件
    http解析
  • 原文地址:https://www.cnblogs.com/andyidea/p/4515531.html
Copyright © 2020-2023  润新知