前言

lua是一种轻量小巧的脚本语言。

lua特性

1.轻量级,编译后不过200K
2.可扩展性
3.自动内存管理
4.支持面向过程编程和函数式编程
……

lua应用场景

1.游戏开发
2.独立应用脚本
3.web应用脚本
4.扩展和数据库插件
5.安全系统

安装使用

安装问题

1.编译lua时,提示

1
lua.c:80:31: fatal error: readline/readline.h: No such file or directory

linux环境缺少readline库。
到ftp://ftp.gnu.org/gnu/readline/ 下载并进行安装

2.安装完readline后提示

1
2
3
4
5
6
7
8
9
/usr/local/lib/libreadline.so: undefined reference to `tputs'
/usr/local/lib/libreadline.so: undefined reference to `tgoto'
/usr/local/lib/libreadline.so: undefined reference to `tgetflag'
/usr/local/lib/libreadline.so: undefined reference to `UP'
/usr/local/lib/libreadline.so: undefined reference to `tgetent'
/usr/local/lib/libreadline.so: undefined reference to `tgetnum'
/usr/local/lib/libreadline.so: undefined reference to `PC'
/usr/local/lib/libreadline.so: undefined reference to `tgetstr'
/usr/local/lib/libreadline.so: undefined reference to `BC'

需要安装Ncurses

3.编译Ncurses提示 error: expected ‘)’ before ‘int’

导入环境变量,在进行配置编译,安装,命令如下

1
2
3
4
5
export CPPFLAGS="-P"
./configure
make
make install
Ncurses

参考:
https://stackoverflow.com/questions/37475222/ncurses-6-0-compilation-error-error-expected-before-int

总结:安装成功安装lua的前提是linux上有readline和ncurses库.

Hello World

和Python类似,它也可以交互式编程,在命令行输入lua后即可进入:

1
2
3
>print("Hello World")
Hello World
>

当然也可以将脚本内容写在文件,例如,将上面的内容写在hello.lua:

1
2
#!/usr/local/bin/lua
print("Hello World")

其中第一行指定了lua解释器路径,执行:

1
2
3
chmod +x hello.lua
./hello.lua
Hello World

这里注意,如果你没有加第一行,shell就不知道用哪个解释器去解释运行,当然你也可以通过下面的方式运行:

1
$ lua hello.lua

注释

同样地,它至少有两种注释,单行注释使用—:

1
2
-- 这里是单行注释
print("hello")

多行注释:

1
2
3
4
5
--[[
多行注释
多行注释
--]]
print("yanbinghu.com")

语法

数据类型

  • nil—表示无效值
  • boolean false和true,lua将nil看成是”假”
  • number 双精度类型的实浮点数
  • string 字符串
  • function 由c或lua编写的函数
  • userdata 表示任意存储在变量中的c数据结构
  • thread 表示执行的独立线路,用于执行协同程序
  • table lua中的表,类似于关联数组

判断类型

可以通过type函数来判断数据类型

1
2
print(type(“hello”) ) --string
print(type(type)) --function

字符串算数操作

在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字:
例如:

1
2
>print(“2” + “6”)
8

  • 字符串连接 ..
1
2
>print(“a”..”b”)
ab
  • 计算字符串长度 #
1
2
>print(#“a”)
1

table

Lua 里表的默认初始索引一般以 1 开始

变量

  • 默认情况下,变量总认为是全局的.
    全局变量不需要声明,访问未初始化的全局变量不会报错,得到的结果是 nil

  • 想删除一个全局变量,只需要将变量赋值为nil
    当且仅当该变量不为nil时,变量存在

  • a =1 —>全局变量

  • local b =2 —>局部变量

  • Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。

未完待续