• 首页
  • 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 安装使用 及简单语法介绍



回到顶部