|
Getting started | Preface | Types and Values | Expressions | Statements | Functions
Part I:The Language 推荐使用文本编辑器和命令行解释程序,这样可以让你更好地对语言理解。 1.Getting Started 1.1 Hello world 程序 print("Hello World") 假定你把上面这句保存在hello.lua文件中,你在命令行只需要: prompt> lua hello.lua 看到结果了吗? 让我们来看一个稍微复杂点的例子: -- defines a factorial function function fact (n) if n == 0 then return 1 else return n * fact(n-1) end end print("enter a number:") a = io.read("*number") -- read a number print(fact(a))
这个例子定义了一个函数,计算输入参数n的阶乘;本例子要求用户输入一个数字n,然后打印n的阶乘。 1.2 Chunks Chunk是一系列于据,Lua执行的每一块语句,比如一个文件或者交互模式下的一行都是一个Chunk. 每个语句结尾的分号(;)是可选的,但如果同一行有多个语句最好用;分开 a = 1 b = a*2 -- ugly, but valid 一个Chunk可以是一个语句,也可以是一系列语句的组合,还可以是函数,Chunk可以很大,在Lua中几个MByte的Chunk是很常见的。 你还可以以交互模式运行Lua,不带参数运行Lua: Lua 5.0 Copyright (C) 1994-2003 Tecgraf, PUC-Rio > 你键入的每个命令(比如:"Hello World")在你press Enter后立即被执行,键入文件结束符可以退出交互模式(ctrl-D in Unix, ctrl-Z in DOS/Windows),或者调用OS库的os.exit()函数也可以退出. 交互模式下,Lua通常把每一个行当作一个chunk,但如果Lua一行不是一个完整的chunk时,他会等待继续输入直到得到一个完整的chunk.在Lua等待续行时,显示不同的提示符(一般是>>). 可以通过指定参数让Lua执行一系列chunk.例如:假定一个文件a内有单个语句x=1;另一个文件b有语句 print(x) prompt> lua -la -lb 命令在一个chunk内先运行a然后运行b.(注意:-l选项会调用require,将会在指定的目录下搜索文件,如果环境变量没有设好,上面的命令可能不能正确运行.) -i选项要求Lua运行指定chunk后进入交互模式. prompt> lua -i -la -lb 将在一个chunk内先运行a然后运行b,然后进入交互模式. 另一个连接外部chunk的方式是使用dofile函数,dofile加载文件并执行它.假设有一个文件: -- file lib1.lua function norm (x, y) local n2 = x^2 + y^2 return math.sqrt(n2) end function twice (x) return 2*x end 在交互模式下: > dofile("lib1.lua") -- load your library > n = norm(3.4, 1.0) > print(twice(n)) --> 7.0880180586677 -i和dofile在调试或者测试Lua代码时是很方便的. 1.2 全局变量 全局变量不需要声明,给一个变量负值即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil. print(b) --> nil b = 10 print(b) --> 10 如果你想删除一个全局变量,只需要将变量负值为nil b = nil print(b) --> nil 这样变量b就好像从没被使用过一样.换句话说,一个全局变量存在当且仅当这个变量不等于nil. 1.3 词法约定 标示符:字母(letter)或者下划线开头的字母、下划线、数字序列.最好不要使用下划线加大写字母的标示符,因为Lua的保留字也是这样的.Lua中,letter的含义是依赖于本地环境的. 保留字:不能当作标示符 and break do else elseif end false for function if in local nil not or repeat return then true until while Lua是大小写敏感的. 注释:单行注释:-- 多行注释:--[[ --]] --[[ print(10) -- no action (comment) --]] 1.4 命令行方式 lua [options] [script [args]] -e:直接将命令传入Lua prompt> lua -e "print(math.sin(12))" --> -0.53657291800043 -l:加载一个文件. -i:进入交互模式. _PROMPT内置变量作为交互模式的提示符 prompt> lua -i -e "_PROMPT= lua> " lua> Lua的运行过程,在运行参数之前,Lua会查找环境变量LUA_INIT的值,如果变量存在并且值为@filename,Lua加载指定的文件.如果变量存在但不是以@开头,Lua假定filename为Lua代码文件并且运行他.利用这个特性,我们可以通过配置灵活的设置交互模式的环境.可以加载包,修改提示符和路径,定义自己的函数,修改或者重名名函数等. 全局变量arg存放Lua的命令行参数. prompt> lua script a b c 在运行以前,Lua使用所有参数构造arg表.脚本名索引为0,脚本的参数从1开始增加.脚本前面的参数从-1开始减少. prompt> lua -e "sin=math.sin" script a b arg表如下: arg[-3] = "lua" arg[-2] = "-e" arg[-1] = "sin=math.sin" arg[0] = "script" arg[1] = "a" arg[2] = "b" |