Lua第一章—起点

Lua第一章—起点

写一个最最简单的程序一一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.1 Chunks

 

Chunk 是一系列语句,Lua 执行的每一块语句,比如一个文件或者交互模式下的每 一行都是一个 Chunk。

每个语句结尾的分号C;)是可选的,但如果同一行有多个语句最好用;分开

a = 1   b= a*2   --ugly, but valid


一个 Chunk 可以是一个语句,也可以是一系列语句的组合,还可以是函数,Chunk 可以很大,在 Lua 中几个 MByte 的 Chunk是很常见的。你还可以以交互模式运行 Lua,不带参数运行 Lua:


Lua 5.0 Copyright© 1994-2003 Tecgraf,PUC-Rio
> 

      你键入的每个命令C(比如:"Hello World")在你键入回车之后立即被执行,键入文 件结束符可以退出交互模式CCtrl-D in Unix, Ctrl-Z in DOS/Windows),或者调用 OS 库 的 os.exit()函数也可以退出。

       在交互模式下,Lua 通常把每一个行当作一个Chunk,但如果 Lua 一行不是一个完 整的 Chunk时,他会等待继续输入直到得到一个完整的 Chunk.在 Lua等待续行时,显示 不同的提示符C(一般是>>)。

       可以通过指定参数让 Lua执行一系列 Chunk。例如:假定一个文件 a 内有单个语句x=1;另一个文件 b 有语句 print(x)

 

prompt> lua-la -lb

       命令首先在一个 Chunk 内先运行 a 然后运行 b。C注意:-l选项会调用 require,将会 在指定的目录下搜索文件,如果环境变量没有设好,上面的命令可能不能正确运行。我们将在 8.1 节详细更详细的讨论 therequire function)

-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")     -- loadyour 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 的含义是依赖于 本地环境的。

保留字:以下字符为 Lua 的保留字,不能当作标识符。

 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> luascript a b c

在运行以前,Lua 使用所有参数构造 arg 表。脚本名索引为 0,脚本的参数从 1开始 增加。脚本前面的参数从-1 开始减少。

 

prompt> lua -e "sin=math.sin" scripta b

arg 表如下:

 

arg[-3] ="lua"
arg[-2] ="-e"
arg[-1] = "sin=math.sin" arg[0] ="script"
arg[1] ="a"
arg[2] ="b"

你可能感兴趣的:(lua)