Lua简介、编译安装教程及变量等语法介绍

 更新时间:2014年10月14日 11:05:38   投稿:junjie  
这篇文章主要介绍了Lua简介、编译安装教程及变量等语法介绍,本文同时讲解了lua注释语法、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 -O http://www.lua.org/ftp/lua-5.2.3.tar.gz
# tar zxvf lua-5.2.3.tar.gz
# cd lua-5.2.3/src
# make linux

2.2 常见问题解决方法

问题1:

复制代码 代码如下:

lua.c:67:31: error: readline/readline.h: No such file or directory
lua.c:68:30: error: readline/history.h: No such file or directory

解决方法:
复制代码 代码如下:

# yum install readline-devel

问题2:
复制代码 代码如下:

make all SYSCFLAGS=”-DLUA_USE_LINUX” SYSLIBS=”-Wl,-E -ldl -lreadline”
make[1]: Entering directory `/root/lua-5.2.3/src'
gcc -o lua lua.o liblua.a -lm -Wl,-E -ldl -lreadline
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `PC'
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tgetflag'
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tgetent'
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `UP'
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tputs'
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tgoto'
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tgetnum'
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `BC'
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `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.jb51.net'
> print (type(value))
string
> value = 39514058
> -- jb51.net 运维生存时间Q群
> print (type(value))
number

3.1 全局变量

Lua变量默认是全局的,在整个会话中将保持不变,除非改变了它。在使用全局变量时,在变量前加个g字母会更加明确。不过,尽量使用局部变量。

3.2 局部变量

使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。定义局部变量可以为它设置一个初始值,也可以不用。如

复制代码 代码如下:
> local value1
> local vlaue2 = ‘www.jb51.net'

4. Lua注释语法

单行注释:–
多行注释:–[[ --]]

5. Lua命令行方式

复制代码 代码如下:

usage: ./lua [options] [script [args]]
Available options are:
  -e stat  execute string 'stat'  //直接将命令传入Lua
  -i       enter interactive mode after executing 'script'  //进入交互模式
  -l name  require library 'name'  //加载一个文件
  -v       show version information  //打印版本信息
  -E       ignore environment variables //忽略环境变量
  --       stop handling options
  -        stop handling options and execute stdin
# ./lua -e "print(type('www.jb51.net'))"
string

全局变量arg存放Lua的命令行参数。

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

复制代码 代码如下:

> 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"

相关文章

  • Lua中遍历数组和table的4种方法

    Lua中遍历数组和table的4种方法

    这篇文章主要介绍了Lua中遍历数组和table的4种方法,本文讲解了使用for遍历、迭代器的方式遍历等方法,同时提供一个复杂table的的遍历方法,需要的朋友可以参考下
    2015-04-04
  • Lua编程示例(四):Lua标准库之表库、字符串库、系统库

    Lua编程示例(四):Lua标准库之表库、字符串库、系统库

    这篇文章主要介绍了Lua编程示例(四):Lua标准库之表库、字符串库、系统库,需要的朋友可以参考下
    2015-07-07
  • Lua中的元表和元方法学习笔记

    Lua中的元表和元方法学习笔记

    这篇文章主要介绍了Lua中的元表和元方法学习笔记,本文主要讲解了getmetatable获取元表、setmetatable修改元表等内容,需要的朋友可以参考下
    2014-12-12
  • Lua所有内置函数罗列

    Lua所有内置函数罗列

    这篇文章主要介绍了Lua所有内置函数罗列,本文汇集了Lua脚本语言的所有内置函数,需要的朋友可以参考下
    2015-04-04
  • Lua模拟面向对象示例分享

    Lua模拟面向对象示例分享

    本文这里主要给大家分享的是一则使用Lua模拟面向对象的方法的示例代码,大家学习下思路,希望对大家能够有所帮助。
    2015-03-03
  • Lua中实现sleep函数功能的4种方法

    Lua中实现sleep函数功能的4种方法

    这篇文章主要介绍了Lua中实现sleep函数功能的4种方法,本文讲解了在一个死循环中设置一个跳出条件方法、调用系统的sleep函数法、Windows下ping命令法、socket库中select函数法4种方法,需要的朋友可以参考下
    2015-04-04
  • 浅析Lua中的迭代器

    浅析Lua中的迭代器

    这篇文章主要介绍了Lua中的迭代器,是Lua入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • Lua中全局变量与非全局环境介绍

    Lua中全局变量与非全局环境介绍

    这篇文章主要介绍了Lua中全局变量与非全局环境介绍,本文讲解了全局变量的原形、非全局的环境、改变函数的全局变量环境、使用__index元方法保留原来的_G,需要的朋友可以参考下
    2014-09-09
  • Lua中对table排序实例

    Lua中对table排序实例

    这篇文章主要介绍了Lua中对table排序实例,本文讲解了Lua中对table的一般排序方法、针对值的排序、同时对键值进行排序等方法,需要的朋友可以参考下
    2014-09-09
  • Lua一维数组与多维数组的使用示例

    Lua一维数组与多维数组的使用示例

    今天小编就为大家分享一篇关于Lua一维数组与多维数组的使用示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12

最新评论