写lua时需要注意的地方
2015-05-29 17:52
363 查看
条件语句判断时,只有false和nil会导致判断为假,其他的任何值都为真。
Lua 的字符串与编码无关; 它不关心字符串中具体内容。
标准 Lua 使用 64 位整数和双精度(64 位)浮点数, 但你也可以把 Lua 编译成使用 32 位整数和单精度(32 位)浮点数。 以 32 位表示数字对小型机器以及嵌入式系统特别合适。
table 是一个关联数组, 也就是说,这个数组不仅仅以数字做索引,除了 nil 和 NaN 之外的所有 Lua 值 都可以做索引
Lua 语言对大小写敏感:
Lua 5.3 之后支持了位运算
关于函数可返回值的数量限制和系统有关。 这个限制一定大于 1000
当你使用 Lua API 时, 就有责任保证做恰当的调用。 特别需要注意的是, 你有责任控制不要堆栈溢出。 你可以使用
Lua 支持协程,也叫 协同式多线程。 一个协程在 Lua 中代表了一段独立的执行线程。 然而,与多线程系统中的线程的区别在于, 协程仅在显式调用一个让出(yield)函数时才挂起当前的执行。
Lua 从一个对象
取长度操作符写作一元前置符
程序可以通过
如果
不是一个序列,因为它有键
Lua 语言有词法作用范围。 变量的作用范围开始于声明它们之后的第一个语句段, 结束于包含这个声明的最内层语句块的最后一个非空语句。 看下面这些例子:
注意这里,类似
Lua 的字符串与编码无关; 它不关心字符串中具体内容。
标准 Lua 使用 64 位整数和双精度(64 位)浮点数, 但你也可以把 Lua 编译成使用 32 位整数和单精度(32 位)浮点数。 以 32 位表示数字对小型机器以及嵌入式系统特别合适。
table 是一个关联数组, 也就是说,这个数组不仅仅以数字做索引,除了 nil 和 NaN 之外的所有 Lua 值 都可以做索引
Lua 语言对大小写敏感:
and是一个保留字,但
And与
AND则是两个不同的有效名字。 作为一个约定,程序应避免创建以下划线加一个或多个大写字母构成的名字 (例如 _VERSION)
Lua 5.3 之后支持了位运算
关于函数可返回值的数量限制和系统有关。 这个限制一定大于 1000
当你使用 Lua API 时, 就有责任保证做恰当的调用。 特别需要注意的是, 你有责任控制不要堆栈溢出。 你可以使用
lua_checkstack这个函数来扩大可用堆栈的尺寸。
Lua 支持协程,也叫 协同式多线程。 一个协程在 Lua 中代表了一段独立的执行线程。 然而,与多线程系统中的线程的区别在于, 协程仅在显式调用一个让出(yield)函数时才挂起当前的执行。
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指向的是外面一层的变量。
相关文章推荐
- lua全局状态机
- LUA require 搜索路径指定方法
- 在Lua程序中使用SQLite的教程
- 在Lua程序中使用MySQL的教程
- 浅谈Lua的面向对象特性
- 简单讲解Lua中的垃圾回收机制
- Lua学习之coroutine总结
- Lua学习之metatable总结
- Lua内置的调试器用法详解
- Lua Require函数
- 浅析Lua编程中的异常处理
- Lua中的文件I/O操作教程
- 在Lua中使用模块的基础教程
- 详解Lua中的表的概念及其相关操作方法
- 浅析Lua中的迭代器
- Evaluate Reverse Polish Notation - LeetCode 150
- lua调用c++函数返回值作用
- How to Evaluate Machine Learning Models, Part 4: Hyperparameter Tuning
- C调Lua
- lua与C++粘合层框架