Lua
特性
- 特性
- 扩展式语言,没有 “main” 程序的概念:它只能嵌入一个宿主程序中工作
- 宿主程序可以通过调用函数执行一小段Lua代码,可以读写Lua变量,可以注入C函数让Lua代码调用。
- 大小写敏感
- 类型
- 动态类型语言
- userdata 类型用来将任意 C 数据保存在 Lua 变量中。
- thread类型,被用来实现协程(coroutine ),不要把 Lua 线程跟操作系统的线程搞混。
- table 类型实现了一个关联数组。{k=>v}
- 字符串到数字的自动转换
- 变量
- 任何变量都被假定为全局变量,除非显式的以 local 修饰定义
- 在变量的首次赋值之前,变量的值均为 nil
- var.Name 这种语法只是一个语法糖,用来表示 var[“Name”]
- 所有的全局变量都是放在一个特定 lua table (environment ) 的诸个域中
- 对一个全局变量 x 的访问 等价于 _env.x,而这又可以等价于 gettable_event(_env, “x”)
- 语句
- Lua 支持惯例形式的语句段,它和 Pascal 或是 C 很相象
- Lua 的一个执行单元被称作 chunk。 一个 chunk 就是一串语句段,它们会被循序的执行。
- lua 把一个 chunk 当作一个拥有不定参数的匿名函数,chunk 内可以定义局部变量,接收参数,并且返回值。
- chunk 可以被保存在一个文件中,也可以保存在宿主程序的一个字符串中。
控制结构
表达式
- 操作符 ~= 完全等价于 (==) 操作的反值。
- 所有的逻辑操作符把 false 和 nil 都作为假, 而其它的一切都当作真。
- 10 or 20 –> 10
- nil or “a” –> “a”
- nil and 10 –> nil
- 10 and 20 –> 20
- Lua 中字符串的连接操作符写作两个点 (‘..’)
- 取长度操作符写作一元操作 #。 字符串的长度是它的字节数
函数
错误处理
因为 Lua 是一个嵌入式的扩展语言,在 Lua 编译或运行的任何时候发生了错误,控制权都会交还给 C
Metatable
每个值都有一个 metatable,它用来定义原始值在特定操作下的行为。
举例来说,当一个非数字的值作加法操作的时候, Lua 会检查它的 metatable 中 “__add” 域中的是否有一个函数。 如果有这么一个函数的话,Lua 调用这个函数来执行一次加法。
环境
也是一个table,存放环境变量
垃圾回收
Lua 提供了一个自动的内存管理。
协程 Coroutine
如已知
程序接口
宿主程序跟 Lua 通讯用的一组 C 函数。
- Lua 使用一个虚拟栈来和 C 传递值。
- Lua 调用 C,被调用的函数都得到一个新的栈,而 C 函数则把要返回的结果也放入堆栈以返回给调用者
独立语言
虽然被设计作为嵌入语言,但是有时也作为独立语言。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com