Lua 语言出生于 1993 年,在近年来被逐渐放大。Lua 很小,编译后通常只有几百 kb,比我们常见的 Shell 都还要小。所以很多系统或项目都采用 Lua 作为脚本语言。
常见的游戏脚本,Nginx,Wireshark,OpenResty,Redis 等都是把 Lua 作为底层的的脚本来实现一些扩展功能。
Lua 虽然很火,但是网上针对 Lua 的系统学习资料非常的少,不仅如此,还非常的不全,同时还存在不少的小坑。我最近就遇到了几个,于是我不得不,从官网阅读帮助文档,从零开始,码出未来!
首先是安装,虽然是简单,但是往往是最简单的,需要的人最多。
我这里以 Mac 为例,安装有两种方法。
第一种是,通过 Homebrew 来安装。
#搜索 lua 软件
brew search lua
#执行安装命令
brew install lua@5.1
使用 Homebrew 的缺点就是,非最新版,因为截止到我的这篇文章,官方最新稳定版本已经到 5.3 了。所以,我采用就是第二种方法。
curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz
tar zxf lua-5.3.5.tar.gz
cd lua-5.3.5
# Linux 使用 make linux test
# Mac 使用 make macosx test
make macosx test
编译完成后,src 目录下会生成 3 个主要的文件:lua(解释器),luac(编译器)和 liblua.a(库)。
上面我们在编译完成后,顺带执行了 test 测试。test 其实就是执行 src/lua -v,输出版本号。
src/lua -v
#或者
make test
当我们编译过 lua 后,我们就可以进行安装了,要注意权限问题,否则会报 Permission denied 或 make: *** [install] Error 1 等问题。
cd lua-5.3.5
make macosx
sudo make install
待安装完成后,我们就可以开始完整 lua 了。先来一个 hello world!
也可以把多行代码,写在文件中,然后执行文件。比如,我们在 xttblog.lua 文件中写入下面的代码。
print("Hello World")
print("www.xttblog.com")
然后,执行 lua xttblog.lua 就可以运行了。
lua 也支持注释,两个减号“–”是行注释,–[[块注释–]]。
print("Hello World")
print("www.xttblog.com”)
--我是行注释
--[[我是块注释
我可以换行--]]
Lua 的变量很简单,Lua 的数字只有 double 型,64 位的浮点运算处理速度也很快。除非大于 100,000,000,000,000 的数字,可能会有精度问题。
num = 1024
num = 52.0
num = 1314.520
num = 520.16e-2
num = 0.88816E1
num = 0xff
num = 0x56
0x 开头的是 16 进制,这点和 C 很像。
lua 的字符串很有特点。字符串可以用单引号,也可以用双引号,还支持C类型的转义,比如: ‘/a’ (响铃), ‘/b’ (退格), ‘/f’ (表单), ‘/n’ (换行), ‘/r’ (回车), ‘/t’ (横向制表), ‘/v’ (纵向制表), ‘/’ (反斜杠), ‘/”‘ (双引号), 以及 ‘/” (单引号)。
str = 'xttblog/n123"'
str = "xttblog/n123/""
str = '/97xttblog/10/04923"'
str = [[xttblog
123"]]
可以看到,lua 还支持两个中括号包含有换行的字符串,这一特性很多语言都有,Java 除外。
Lua 中的 null 是用 nil 表示的。这一点从 Redis 中也可以看出。
v = UndefinedVariable
-- UndefinedVariable 是未定义的变量,所以,v = nil
布尔类型有 3 个值,分别是 nil、false,true,数字 0,‘’空字符串(’/0’)都是 true!nil 和 false 都代表 false。
lua 中的变量默认情况下全是全局变量,那怕是语句块或是函数里。只有在变量前加 local 关键字的才是局部变量。
theGlobalVar = "全局变量"
local theLocalVar = "局部变量"
关于 Lua,这篇文章先做个结尾,下篇我们学习分支,循环等内容。
: » Lua 的安装与入门教程
原创文章,作者:1402239773,如若转载,请注明出处:https://blog.ytso.com/tech/java/252133.html