标签:
and
是一个保留字,但 And
与 AND
则是两个不同的有效名字。 作为一个约定,程序应避免创建以下划线加一个或多个大写字母构成的名字 (例如 _VERSION)lua_checkstack
这个函数来扩大可用堆栈的尺寸。Lua 从一个对象 obj
中获取一个元方法的过程:
rawget(getmetatable(obj) or {}, "__" .. event_name)
取长度操作符写作一元前置符 #
。 字符串的长度是它的字节数(就是以一个字符一个字节计算的字符串长度)。
程序可以通过 __len
元方法来修改对字符串类型外的任何值的取长度操作行为。
如果 __len
元方法没有给出, 表 t
的长度只在表是一个 序列 时有定义。 序列指表的正数键集等于 {1..n} , 其中 n 是一个非负整数。 在这种情况下,n 是表的长度。 注意这样的表
{10, 20, nil, 40}
不是一个序列,因为它有键 4
却没有键 3
。 (因此,该表的正整数键集不等于 {1..n} 集合,故而就不存在 n。) 注意,一张表是否是一个序列和它的非数字键无关。
return functioncall
这样的调用形式将触发一次 尾调用。 Lua 实现了 完全尾调用(或称为 完全尾递归): 在尾调用中, 被调用的函数重用调用它的函数的堆栈项。 因此,对于程序执行的嵌套尾调用的层数是没有限制的。 然而,尾调用将删除调用它的函数的任何调试信息。 注意,尾调用只发生在特定的语法下, 仅当 return 只有单一函数调用作为参数时才发生尾调用; 这种语法使得调用函数的所有结果可以完整地返回。 因此,下面这些例子都不是尾调用:
return (f(x)) -- 返回值被调整为一个 return 2 * f(x) return x, f(x) -- 追加若干返回值 f(x); return -- 返回值全部被舍弃 return x or f(x) -- 返回值被调整为一个
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
指向的是外面一层的变量。
标签:
原文地址:http://www.cnblogs.com/cxiaojia/p/4515531.html