• 首页
  • lua
  • lua Mac brew 安装使用 及简单语法介绍

lua Mac brew 安装使用 及简单语法介绍

lua.png


文章目录



什么是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个元素需要注意:

  1. if 判断语句后面要有 then 关键词.
  2. elseif 要紧挨着写,中间不需要空格等.
  3. 判断结束后必须以 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 时,结束循环.

出自:lua Mac brew 安装使用 及简单语法介绍

回到顶部