lua Mac brew 安装使用 及简单语法介绍
文章目录
什么是lua
Lua 是一门扩展式程序设计语言,被设计成支持通用过程式编程,并有相关数据描述设施。 同时对面向对象编程、函数式编程和数据驱动式编程也提供了良好的支持。 它作为一个强大、轻量的嵌入式脚本语言,可供任何需要的程序使用 .(引用自 Lua 5.3 参考手册)
mac 下如何安装 lua
mac 下使用 brew 安装:
brew search lua
brew install lua
查看是否安装成功
➜ ~ lua
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print('Hello World!');
Hello World!
>
上面成功输出了 Hello World! ,安装没有问题.
lua 支持上面这种直接在 shell 界面输入执行 lua 语言,而且还支持直接运行 lua 脚本文件.
是不是非常像 node.js
nano yijiebuyi.lua
#!/usr/local/bin/lua
print("Hello, World")
保存后修改权限
chmod +x yijiebuyi.lua
运行脚本文件
./yijiebuyi.lua
Hello World
Lua 中的注释
行注释 -- 两个减号是行注释
--[[
这是块注释
这是块注释
--]]
Lua 中的变量
Lua 中的字符串定义可以 单引号,也可以 双引号. (这点非常像 JavaScript )
test='一介布衣';
test="一介布衣"
Lua 中没有特殊说明全部是 全局变量 (这点又类似 JavaScript )
test="一介布衣" -- 全部变量
local test="一介布衣" --局部变量
JavaScript 中定义 test="一介布衣",
那么 test 默认是全局变量.
如果到定义布局变量:
var test="一介布衣";
Lua 中没有声明过的变量
未声明过的变量被访问时, Lua 返回 nil ,
JavaScript 中访问未声明过的变量 返回 undefined ,
C 语言中访问未声明的变量返回 null .
参数定义
上面说到了无特殊说明,全部指全局变量,除非用 local test="一介布衣" 使用 local 字段定义,默认为局部函数.
Lua 上还有一种更为方便的函数参数定义,类似于 go 语言.
多参数定义,同时指定多个参数值.
例如:
name,age,sex='一介布衣',30,'男';
上面的定义是不是很灵活,在Lua 中是完全没有问题的,对应三个参数结果为:
name='一介布衣'
age=30
sex='男'
如果下面这样的定义呢:
name,age,sex='一介布衣',30,'男','IT码农';
上面的定义方式也没有问题,把4个参数值指定给3个变量时, 第四个值由于没有找到匹配的参数名,所以系统自动舍弃.
所以上面的结果完全等同于
name,age,sex='一介布衣',30,'男';
函数
Lua 中的函数 和 JavaScript 的函数非常像.
不同处:
JavaScript 中函数体以 花括号 包围.
而 Lua 中并没有 花括号,但是结尾处却多了 end 标识,函数必须以 end 结尾.
递归
function fun(n)
if n < 2 then return 1 end
return fun(n - 2) + fun(n - 1)
end
我们在 shell 界面直接输入 lua 代码实验:
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> function fun(n)
>> if n < 2 then return 1 end
>> return fun(n - 2) + fun(n - 1)
>> end
> print(fun(8));
34
> print(fun(2));
2
>
可以看到上面成功执行了 Lua 定义的递归函数 fun
定义一个关于求长方形面积的函数
function m(a,b)
return a*b;
end;
我们在 shell 环境运行 lua 代码:
> function m(a,b)
>> return a*b;
>> end;
> print(m(8,9));
72
Lua 中的函数也可以赋值给一个变量,这点又非常像 JavaScript
test=function() return 10*10 end;
这样定义是完全没有问题的.
但是 lua 中默认定义的函数全部为 全局函数. 只有 函数定义前面加上 local 关键词,表示 局部函数 (这个比较新鲜,JavaScript 中并没有 局部函数一说 )
函数的返回值
Lua 中函数的返回值比较有意思, 它有点类似 go 语言函数的返回值,可以是多个值.
function getUserInfo()
return '一介布衣',30,'男','IT码农';
end;
上面的函数 getUserInfo 返回了 4 个参数.那用什么来接收呢?
就是我们上面说到的多个参数定义:
name,age,sex=getUserInfo();
针对上面函数返回4个返回值, 但是前面接收函数返回值只有3个参数,怎么办... 第四个返回值被自动舍弃.
控制语句
说到控制语句,不外乎
if 判断
while 循环
for 循环
until 循环
if
lua 的if 逻辑判断语句比较特殊:
有3个元素需要注意:
- if 判断语句后面要有 then 关键词.
- elseif 要紧挨着写,中间不需要空格等.
- 判断结束后必须以 end 结尾.
直接在 shell 中运行 lua 程序:
if(5>10) then
print('10');
elseif 15>10 then
print('15');
else
print('0');
end
15
最后输出 15
lua 中的if 判断语句,可以直接写,也可以用括号括起来
if(15>5) then === if 15>5 then
while 循环
while 循环和其他语言也有一点点区别
循环条件后面需要加 do 标识
循环体不需要花括号
循环结束后要加 end 标识
sum = 0
num = 1
while num <= 100 do
sum = sum + num
num = num + 1
end
print("sum =",sum)
输出:5050
for 循环
for 循环和 while 循环语法非常相似.
判断条件后面加 do 标识符.
循环体无需花括号.
循环结束要加 end 标识
sum = 0
for i = 1, 100 do
sum = sum + i
end
until循环
until 循环一般我们在 sell 脚本中常见,但是语言中很少看到这个关键词,lua 中实现了它的循环
sum = 2
repeat
sum = sum ^ 2 --幂操作
print(sum)
until sum >1000
我们对 sum 进行幂操作,当它的值超过 1000 时,结束循环.