lua

  1. Lua
    1. 特性
    2. 控制结构
    3. 表达式
    4. 函数
    5. 错误处理
    6. Metatable
    7. 环境
    8. 垃圾回收
    9. 协程 Coroutine
    10. 程序接口
    11. 独立语言

Lua

Lua 5.1 参考手册

特性

  • 特性
    • 扩展式语言,没有 “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

💰

×

Help us with donation