Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1040066
  • 博文数量: 264
  • 博客积分: 6005
  • 博客等级: 大校
  • 技术积分: 2798
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-08 20:15
文章分类

全部博文(264)

文章存档

2011年(42)

2010年(213)

2009年(4)

2008年(2)

2007年(3)

分类:

2010-05-27 19:28:28

写一个最最简单的程序——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的阶乘。

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

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

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

一个Chunk可以是一个语句,也可以是一系列语句的组合,还可以是函数,Chunk可以很大,在Lua中几个MByteChunk是很常见的。

你还可以以交互模式运行Lua,不带参数运行Lua:

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

> 

你键入的每个命令(比如:"Hello World")在你键入回车之后立即被执行,键入文件结束符可以退出交互模式(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,将会在指定的目录下搜索文件,如果环境变量没有设好,上面的命令可能不能正确运行。我们将在8.1节详细更详细的讨论the require 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")     -- load your library

> n = norm(3.4, 1.0)

> print(twice(n))        --> 7.0880180586677

-idofile在调试或者测试Lua代码时是很方便的。

全局变量

全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil.

print(b)      --> nil

b = 10

print(b)      --> 10

如果你想删除一个全局变量,只需要将变量负值为nil

b = nil

print(b)      --> nil

这样变量b就好像从没被使用过一样.换句话说, 当且仅当一个变量不等于nil时,这个变量存在。

词法约定

标示符:字母(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)

--]]

命令行方式

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的值,如果变量存在并且值为@filenameLua将加载指定文件。如果变量存在但不是以@开头,Lua假定filenameLua代码文件并且运行他。利用这个特性,我们可以通过配置,灵活的设置交互模式的环境。可以加载包,修改提示符和路径,定义自己的函数,修改或者重命名函数等。

全局变量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"

阅读(2898) | 评论(0) | 转发(0) |
0

上一篇:lua 序言

下一篇:LUA 第2章 类型和值

给主人留下些什么吧!~~