Lua简介、编译安装教程及变量等语法介绍
公司业务有用到Lua,与nginx结合起来实现高性能的web应用,想去弄懂这方面的知识,就去了解学习了下Lua,欢迎大咔们指教。
1.Lua介绍
Lua是一门简单的编程语言,它的优势在于可以整合C++的模块来扩展自身的功能,使用数百行或更少的代码来解决复杂的问题。具有的特征有:
1.1.可扩展性:Lua从一开始就被设计成易于扩展的语言,很多功能都是通过外部库来实现的,很容易与其他编程语言如C、C++、Java等等进行交互。
1.2.简洁:Lua十分简洁,但是功能强大,易于学习,很适合小规模的应用。
1.3.高效:Lua有很高的执行效率。
1.4.可移植性:Lua可以运行在任何现有的系统上。
Lua脚本是包含一系列Lua命令的简单脚本,扩展名为.lua的文本文件。单个命令或者一系列命令组成的脚本文件,在Lua中我们把它称为代码块。
代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。
2.Lua安装
先把Lua环境搭建起来,便于后面学习演示。
#curl-R-Ohttp://www.lua.org/ftp/lua-5.2.3.tar.gz #tarzxvflua-5.2.3.tar.gz #cdlua-5.2.3/src #makelinux
2.2常见问题解决方法
问题1:
lua.c:67:31:error:readline/readline.h:Nosuchfileordirectory lua.c:68:30:error:readline/history.h:Nosuchfileordirectory
解决方法:
#yuminstallreadline-devel
问题2:
makeallSYSCFLAGS=”-DLUA_USE_LINUX”SYSLIBS=”-Wl,-E-ldl-lreadline” make[1]:Enteringdirectory`/root/lua-5.2.3/src' gcc-olualua.oliblua.a-lm-Wl,-E-ldl-lreadline /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so:undefinedreferenceto`PC' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so:undefinedreferenceto`tgetflag' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so:undefinedreferenceto`tgetent' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so:undefinedreferenceto`UP' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so:undefinedreferenceto`tputs' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so:undefinedreferenceto`tgoto' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so:undefinedreferenceto`tgetnum' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so:undefinedreferenceto`BC' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so:undefinedreferenceto`tgetstr'
解决方法:
由于没有链接ncurses库,需要加上-lncurses即可。
#vim./src/Makefile linux: $(MAKE)$(ALL)SYSCFLAGS="-DLUA_USE_LINUX"SYSLIBS="-Wl,-E-ldl-lreadline-lncurses"
3.Lua变量
在Lua中,变量不需要声明就可以使用的,因此可以在任何地方引入需要的变量。对变量的追踪就变难了。这就需要我们在使用当中,要格外的小心,以免不同函数中用了相同名字的变量而造成数据的混乱。
同时,也不需要指定变量的类型,如nul、boolean、string、number、table。变量的类型取决于给它赋的值。访问一个没有初始化的变量也不会出错,只不过得到的结果是空值nil。可以使用type函数来判断变量的类型。如:
#./lua >value='www.nhooo.com' >print(type(value)) string >value=39514058 >--jb51.net运维生存时间Q群 >print(type(value)) number
3.1全局变量
Lua变量默认是全局的,在整个会话中将保持不变,除非改变了它。在使用全局变量时,在变量前加个g字母会更加明确。不过,尽量使用局部变量。
3.2局部变量
使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。定义局部变量可以为它设置一个初始值,也可以不用。如
>localvalue1 >localvlaue2=‘www.nhooo.com'
4.Lua注释语法
单行注释:–
多行注释:–[[--]]
5.Lua命令行方式
usage:./lua[options][script[args]] Availableoptionsare: -estat executestring'stat' //直接将命令传入Lua -i enterinteractivemodeafterexecuting'script' //进入交互模式 -lname requirelibrary'name' //加载一个文件 -v showversioninformation //打印版本信息 -E ignoreenvironmentvariables//忽略环境变量 -- stophandlingoptions - stophandlingoptionsandexecutestdin #./lua-e"print(type('www.nhooo.com'))" string
全局变量arg存放Lua的命令行参数。
在运行以前,Lua使用所有参数构造arg表。脚本名索引为0,脚本的参数从1开始增加。脚本前面的参数从-1开始减少。
>lua-e"sin=math.sin"scriptab arg表如下: arg[-3]="lua" arg[-2]="-e" arg[-1]="sin=math.sin" arg[0]="script" arg[1]="a" arg[2]="b"