zoukankan      html  css  js  c++  java
  • 写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 指向的是外面一层的变量。

  • 相关阅读:
    【模板】Sparse-Table
    UVa 11235 Frequent values
    【模板】树状数组
    UVa 1428 Ping pong
    数学技巧
    UVa 11300 Spreading the Wealth
    UVa 11729 Commando War
    UVa 11292 Dragon of Loowater
    POJ 3627 Bookshelf
    POJ 1056 IMMEDIATE DECODABILITY
  • 原文地址:https://www.cnblogs.com/andyidea/p/4515531.html
Copyright © 2011-2022 走看看