赞
踩
安装过程
- 第一步:下载Lua源码包,并进入目录
wget http://www.lua.org/ftp/lua-5.4.0.tar.gz
- 第二步:解压源码包,并进入目录
tar zxf lua-5.4.0.tar.gz cd lua-5.4.0/ ls
- 第三步:编译
make linux test
- 第四步:之后会在src目录下生成两个可执行程序lua和luac
ls src/
- 第五步:安装Lua
sudo make install
- 安装完成之后:
- 头文件保存在/usr/local/include/目录下
- 可执行程序保存在/usr/local/bin/目录下
- 动态库安装在/usr/local/lib/目录下
- 还有一些内容也安装在/usr/l;ocal目录下
ls /usr/local/include/lua* ls /usr/local/bin/lua* ls /usr/local/lib/liblua*
- 第六步:刷新动态库链接
sudo ldconfig
- 第七步:查看lua安装的版本
lua -v
演示案例1
- 建立一个hello.lua文件,内容如下:
print("Hello World")
- 运行效果如下:
演示案例2
- 下面的fact.lua程序用来求一个数的阶乘结果:
-- 定义一个计算阶乘的函数 function fact(n) if n == 0 then return 1 else return fact(n-1) * n end end print("enter a number:") -- 读取一个数字 a = io.read("*n") -- 打印结果 print(fact(a))
- 运行效果如下:
进入交互式解释器
- 在命令行下直接输入lua即可进入
- 进入之后输入的每一条命令都会在按下回车键之后立即执行
- 例如,我们输入下面的语句
退出交互式解释器
有两种方式退出交互式解释器:
输入EOF控制符(POSIX下为ctrl+D、Windows下为ctrl+Z)
或者调用操作系统的exit函数(执行os.exit())退出
例如,在Linux下输入ctrl+D退出:
- 或者执行os.exit()退出
交互式Lua
- 当不使用任何参数调用lua时,就进入了上面的交互式模式
- 在上面已经介绍了
Lua脚本
- lua解释器默认安装在/usr/local/bin/目录下,如下所示:
- 因此,当一个脚本的开头以"#!/usr/local/bin/lua"开始时,这是一个lua的脚本,这个脚本中可以执行lua程序
- 下面是一个名为lua_test.sh的脚本,内容如下:
#!/usr/local/bin/lua print("HelloWorld")
- 赋予其可执行权限,并运行:
chmod +x lua_test.sh ./lua_test.sh
与老版本中的兼容
- 从Lua 5.3版本开始,可以直接在交互式模式下输入表达式,Lua语言会输出表达式的值,例如
math.pi/4 a = 15 a ^ 2 a + 2
- 但是,在Lua 5.3之前,需要在表达式前面加上一个“=”号
a = 15 = a ^ 2 = a + 2
- 为了向下兼容,Lua 5.3之后的版本还是支持之前的语法
-e选项
- 该选项允许我们直接在命令行中输入代码
- 备注:在POSIX系统下需要使用双引号,以防止Shell错误地解析括号
- 例如:
lua -e "print(math.sin(12))"
-i选项
- -i选项可以让Lua解释器在执行完指定的程序段之后再进入交互模式
- 这一选项对于调试和手工测试很有用
- 例如,下面是一个prog.lua程序
print("Hello World") a = 15
- 现在我们输入下面的命令,让其执行完prog.lua程序再进入交互模式:
lua -i prog.lua
- 可以看到其打印了“Hello World”,然后打印a,可以看到a为15
-l选项
- 该选项用于加载库之后再进入交互式模式,与-i选项有点类似
- 例如,下面的命令先加载lib库,然后再执行x=10的赋值语句,并最终进入交互模式,进入之后打印x可以看到我10
lua -i -llib -e "x=10"
dofile()函数
- 进入交互式解释器之后,可以调用dofile()函数加载一个外部已经存在的lua文件
- 该函数在开发阶段也很有用。我们可以同时打开两个窗口,一个窗口使用文件编辑器编辑的代码(例如prog.lua),另一个窗口中使用交互式模式运行Lua语言解释器。当修改完代码并保存后,只要在Lua语言交互模式的提示符下执行dofile("prog.lua")就可以加载新代码
- 例如,下面有一个lib.lua文件,内容如下:
-- 定义了两个函数 function norm(x, y) return math.sqrt(x^2 + y^2) end function twice(x) return 2.0*x end
- 我们进入交互式解释器,然后在里面调用dofile()函数让其加载lib.lua文件的所有内容,之后就可以调用里面的函数了
;的使用
- 如果执行一行语句之后,在末尾加上了分号(;),那么这条语句的输出不会被打印,但是这条命令被执行了
- 例如:输入io.flush()默认会输出"true",可以在末尾加上;让其不打印消息
- 即使不打印消息,但是这条语句也是被执行了的
LUA_INIT_5_4、LUA_INIT环境变量
- lua解释器在处理参数前,会先查找系统中名为LUA_INIT_5_4环境变量(根据你Lua的版本而定,我的lua版本为5.4),如果查找不到再去查找LUA_INIT环境变量
- 如果这两个环境变量中的任意一个存在,如果:
- 这两个环境变量的内容为@filename,那么lua解释器就会运行这个文件
- 这两个环境变量的内容不是以@开头的,那么解释器就会认为这两个环境变量包含的是lua代码,会对其进行解释执行
- 这些环境变量使得我们可以灵活的配置独立解释器。例如,我们可以预先加载程序包(Package)、修改路径、定义自定义函数、对函数进行重命名或删除函数等等
lua解释器的程序参数
- lua在运行代码前会创建一个名为arg的表,这个表存储了所有的命令行参数。你可以把它想象为C语言中main函数的argv数组
- Lua语言也支持可变长参数,可以通过可变长参数表达式来获取,在脚本文件中,表达式...表示传递给脚本的所有参数(这些内容在后面介绍“可变长参数”的时候再介绍)
- 例如,下面我们需要调用lua来执行script脚本,并且给该脚本传入了3个参数a、b、c,那么
- arg[0]=script、arg[1]=a、arg[2]=b、arg[3]=c
lua script a b c
- 位于脚本之前的所有选项位于负数索引上,例如:
- arg[-3]=lua、arg[-2]=-e、arg[-1]=sin=mayj.sin、arg[0]=script、arg[1]=a、arg[2]=b、arg[3]=c
lua -e "sin=math.sin" script a b c
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。