Lua2.4 参考手册(一)

说明:
这个文档是 Lua2.4 的 doc 目录里的 refman.ps 文件。
原文版权归原作者所有,这篇翻译只是作为学习之用。如果翻译有不当之处,请参考原文。
-------------------以下是正文-------------------
编程语言 Lua2.4 的参考手册

摘要:Lua 是一个扩展程序语言,被设计用做其它程序的配置语言。本文档描述 Lua 编程语言 2.4 版,以及 Lua 程序和宿主 C 程序交互的 API。它还提供了一些使用这些主要特点的例子。

--------------------------------------
1 简介
--------------------------------------
Lua 是一个扩展编程语言,支持通用编程功能与数据描述功能。它应该做为别的程序的配置语言使用。Lua 是由 R. Ierusalimschy, L. H. de Figueiredo 和 W. Celes 设计, 由 W. Celes 实现。

Lua 被实现为由 C 语言写成的库。做为一个扩展语言,Lua 没有 "main" 函数的概念;它只能嵌入到宿主运行,叫做嵌入程序。宿主可以执行一段 Lua 代码,可以读写 Lua 变量,可以注册被 Lua 代码调用的 C 函数。通过注册 C 函数,Lua 可以扩展自己以应对不同的领域,从而创建可定制、共享语法框架的编程语言。

Lua 是自由分发的软件,正常提供没有什么保证。本文档里描述的这个实现可以从下面的匿名 ftp 得到:

www.lua.org/ftp/lua-2.4.tar.gz

--------------------------------------
2 环境和模块
--------------------------------------
Lua 中所有的语句都在一个全局环境中执行。这个全局环境持有所有的全局变量和函数,在嵌入语言一开始执行时进行初始化,并持续到结束。

这个全局环境可以用 Lua 代码或者嵌入程序来管理,可以通过 Lua 的实现库来读写全局变量。

全局变量不需要声明。所有的变量被认为是全局的除非明确声明为 local (详见 4.4.5 节,local 的声明)。在第一次赋值之前,全局变量的值为 nil。

Lua 的执行单元叫做模块(module) 。module 的语法为(注一):

module --> { statement | function }

一个模块可以包含语句和/或函数定义,可以在一个文件中或者在一个宿主程序的字符串中。当执行一个模块,首先它所有的函数和语句被编译,然后语句按顺序执行。模块对于全局环境的所有修改是持久的,这些修改在模块结束后依然可见。修改包括全局变量的修改和新函数的定义(注二)

模块可被预编译,详见程序 luac。包含模块代码的文本文件和它们的二进制预编译字节码形式是等价的。Lua 可以自动检测文件类型并做相应操作。

注一:照倒,{ a } 表示 0 个或多个 a,[ a ] 表示一个可选的 a,{ a } +(加号是右上角标)表示一个或多个 a。
注二:实际上,一个函数的定义就是给一个全局变量赋值。(详见第 3 节)。

--------------------------------------
3 类型
--------------------------------------
Lua 是动态类型语言。变量没有类型;只有值有类型。所有值含有自己的类型。所有,Lua 语言中没有类型定义。

Lua 中有七种基本数据类型:nil, number, string, function, Cfunction, userdata, 和 table。Nil 是值为 nil 的类型,它的主要性质就是和其它值不同。Number 表示实数(浮点型),string 是字符串。

函数是第一类值(first-class values)。这意味着他们可以存储在变量中,做为参数传递给其他函数或者做为结果返回。当函数被定义,它的函数体被编译并保存在一个给定名称的全局变量。Lua 可以调用(和操作)写在 Lua 或 C 中的函数;后者的类型是 Cfunction。

userdata 类型允许 Lua 变量保存任意的 C 指针(void*)。它相当于 C 语言中的 void* 型指针,所以在 Lua 中除分配和相等测试操作以外,没有其它预定义的操作。但是,通过使用回退(fallback),程序员可以为 userdata 值定义操作,参见 4.7 节。

table 类型实现为关联数组,即数组不仅可以用数字和字符串索引,也可以用任务值索引(除了 nil)。因此,该类型不仅可用于表示普通数组,也可以用于表示符号表,集合,记录等。为表示一个记录,Lua 使用字段名为下标。语言通过提供 a.name 这种表示作为 a["name"] 的语法糖。表也可以包含方法。因为函数是第一类的,表字段可以包含函数。t:f(x) 形式是 t.f(t,x) 的语法糖,它调用表 t 中的方法 f ,并把它自己做为第一个参数传入。

需要特别注意的是 table 是对象而非值。变量不能包含 table,只能引用它。赋值,参数传递,返回总是会操作 table 的引用,而不会对 table 进行拷贝。而且,table 必须在使用前显式创建。参见 4.5.7 节。
(未完待续)

时间: 2024-07-29 21:35:06

Lua2.4 参考手册(一)的相关文章

Lua2.4 参考手册(六)

(接上篇)--------------------------------------8 一些例子--------------------------------------本段给出一些显示 Lua 特性的例子.它并不打算覆盖完整的语言,只是显示一有趣的使用. -------------------8.1 数据结构-------------------表是统一的数据结构.它可以实现多种数据类型,像通常的数组,记录,集合,包,和列表.数组不用解释.在 Lua 中,索引通常从 1 开始,但这只是个惯

Lua2.4 参考手册(五)

(接上篇)--------------------------------------7 调试接口--------------------------------------Lua 没有内置的调试功能.而是借助于函数和钩子(hook)提供了一个特殊接口,可以用来构建不同种类的调试器,分析器(profile)和一些其它的需要解释器内部信息的工具.这个接口在 luadebug.h 文件中声明.-------------------7.1 栈和函数信息-------------------获得解释器栈

Lua2.4 参考手册(四)

(接上篇)--------------------------------------6 预定义的函数和库--------------------------------------Lua 的一组预定义函数虽少但功能强大.他们中大多数提供的功能让语言有一定程度的自反性.一些功能不能通过语言的其它部分模拟也不能通过标准的 Lua API 模拟.其它的只是一些有用的有用通用 API 函数接口. 库,在另一方面,提供了一种通过标准 API 实现的有用的程序.因此,它们并非语言必需的部分,并且作为单独的

Lua2.4 参考手册(三)

(接上篇)--------------------------------------5 API--------------------------------------这节主要描述 Lua 的 API, 也就是宿主程序和库交互的一组 C 函数.API 函数可以分为以下几类:1. 执行 Lua 代码:2. 在 Lua 和 C 之间进行值的转化:3. 操作(读写)Lua 对象:4. 调用 Lua 函数:5. 由 Lua 调用的 C 函数:6. Lua 对象的引用. 所有的 API 都在文件 lu

Lua2.4 参考手册(二)

(接上篇)--------------------------------------4 语言--------------------------------------这节介绍 Lua 的词法,语法和语义. -------------------4.1 词法约定-------------------Lua 是区别大小写的语言.标识符可以是任何字母,数字,下划线组成的字符串,且首字母不可为数字.下面这些是保留的关键字,不可用做标识符:and     do     else     elseif 

angular参考手册拷贝

AngularJS 参考手册 AngularJS 指令 本教程用到的 AngularJS 指令 : 指令 描述 ng-app 定义应用程序的根元素. ng-bind 绑定 HTML 元素到应用程序数据 ng-bind-html 绑定 HTML 元素的 innerHTML 到应用程序数据,并移除 HTML 字符串中危险字符 ng-bind-template 规定要使用模板替换的文本内容 ng-blur 规定 blur 事件的行为 ng-change 规定在内容改变时要执行的表达式 ng-check

EL表达式参考手册

一.EL简介 1.语法结构     ${expression}2.[]与.运算符     EL 提供.和[]两种运算符来存取数据.    当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 [].例如:        ${user.My-Name}应当改为${user["My-Name"] }    如果要动态取值时,就可以用[]来做,而.无法做到动态取值.例如:        ${sessionScope.user[data]}中data 是一个变量3

小生总结:新手必看的jQuery参考手册主要API

本文整理了一些主要的jQuery API,其中包括jQuery 核心函数和方法.jQuery属性参考手册.jQuery CSS操作.jQuery选择器.jQuery文档操作.jQuery筛选操作.jQuery事件方法.jQuery效果.jQuery Ajax操作.jQuery工具函数.jQuery事件对象.jQuery延迟对象.jQuery回调函数,欢迎收藏使用. jquery核心函数 函数                                 描述 jQuery()    这个函数接

Dubbo -- 系统学习 笔记 -- 配置参考手册

配置参考手册 <dubbo:service/> <dubbo:reference/> <dubbo:protocol/> <dubbo:registry/> <dubbo:monitor/> <dubbo:application/> <dubbo:module/> <dubbo:provider/> <dubbo:consumer/> <dubbo:method/> <dubbo: