lua--数据类型、变量、循环、函数、运算符的使用

lua是一种轻量级脚本语言,由c语言编写,设计lua的初衷是为了:嵌入到应用程序中,提供灵活的扩展和定制化功能
lua官网:https://www.lua.org/ 可以从中下载安装lua

一、第一个lua程序

lua有两种编程方式:交互式和脚本式。脚本式就是编写脚本文件后执行,交互式是进入lua控制台进行编程,交互式在实际开发中并不会使用,下面都将使用脚本式进行编程

1. 创建脚本文件

lua脚本不对后缀名有要求,但一般我们都以lua为后缀,以示区分

vi hello.lua

内容为:

print("hello world")
2. 执行lua脚本

lua脚本的执行,使用lua命令

lua ./hello.lua

结果:

二、数据类型

在使用数据类型之前,先来了解下lua的注释

lua中单行注释使用:

-- 单行注释

多行注释使用:

--[[
多行注释
]]--

下面是lua数据类型的使用

1. number

number类型用来表示lua中的数字类型,包括整数和浮点数,精度为双精度

i = 1
print(i)

i = 9.99999
print(i)

print(type(i))

运行结果:

2. nil

和Java中的null类似,nil表示一个无效值,也可以置空一个变量

i = 1
print(i)

i = nil
print(i)

运行结果:

3. string
3.1 定义方式

字符串类型定义方式有三种:

定义方式描述
单引号:'内容' 表示单行字符串
双引号:"内容" 和单引号相同
方括号:[[内容]] 表示多行字符串
s = "abc"
print(s)

s = 'def'
print(s)

s = [[
gh,
多行内容,
123
]]
print(s)

运行结果:

3.2 获取字符串长度

使用#获取字符串长度

print("-----")
s = 'abcedf'
print(#s)

运行结果:

3.3 字符串使用+

lua在字符串使用+号时,优先将字符串转为数字

print("-----")
print('1' + 2)
print('1' + '2')

运行结果:

3.4 字符串拼接

那么如何对字符串进行拼接呢?使用..连接字符串

print("-----")
print("1".."2".."abc")

运行结果:

4. table

table既可以作为哈希表,又可以作为列表、数组。tab的表现形式更像map

定义table使用:{}

4.1 table作为数组使用
tb = {'a','b','c'}

-- 遍历输出
for k,v in pairs(tb) do
        print(k..":"..v)
end

运行结果:

可以看到,table如果不指定key,默认会从1开始将索引作为key

4.2 table作为map使用
tb = {k1 = '1',k2 = '2',k3 = '3'}
for k,v in pairs(tb) do
        print(k..":"..v)
end

运行结果:

4.3 获取table中的元素

两种方式:

获取方式例子
通过table['key'],如果是数组不需要加引号tb["k1"]
通过table.key,如果是数组则不支持tb.k1

测试:

tb = {k1 = '1',k2 = '2',k3 = '3'}

print(tb['k1'])
print(tb.k2)

运行结果:

4.4 修改和增加table元素

使用获取table中元素的方式进行赋值就可以实现修改和增加table元素

tb = {k1 = '1',k2 = '2',k3 = '3'}

tb["k1"] = 4
tb['k4'] = 8
tb.k5 = 10


for k,v in pairs(tb) do
        print(k..":"..v)
end

运行结果:

4.5 删除table元素

将元素赋值为nil即可

tb.k2 = nil
5. function

定义函数类型有两种方式:

  • 定义函数,将函数方法名赋值给一个变量
  • 匿名函数,直接将函数赋值给变量
5.1 定义函数方式
-- 定义一个函数
function sum(a,b)
        return a + b
end

-- 将函数赋值给变量
f1 = sum
print(f1(1,6))

运行结果:

5.2 匿名函数方式
function sumAndPrint(a,b,printFunc)
        ret = a + b
        -- 调用传入的函数
        printFunc(ret)
        return ret
end

-- 第三个参数是一个函数
sumAndPrint(10,20,
        function(result)
                print(result)
        end
)

运行结果:

三、变量

1. 作用域

lua中变量分为局部变量和全局变量,默认为全局变量,局部变量使用local关键字声明

function scope()
        a = 0
        local b = 1
end

scope()
print(a)
print(b)

运行结果:

2. 多变量赋值

除了1:1(一个变量对应一个赋值)进行变量赋值外,lua还支持 n:n 、(m < n):n、n:(m < n) 变量赋值

方式描述
n : n按先后顺序将值赋给变量
(m < n) : n按先后顺序将值赋给变量,多余的值丢弃
n : (m < n)按先后顺序将值赋给变量,值少的,赋值为nil
a1,b1 = 1,2
print('a1:'..a1..',b1:'..b1)

a1,b1 = 5,3,4
print('a1:'..a1..',b1:'..b1)

a1,b1 = 9
print('a1:'..a1)
print(b1)

运行结果:

四、循环

1. while
a = 0
while(a < 10) do
        a = a + 1
        print(a)
end

运行结果:

2. for

for循环的语法稍微优点不同,第一个值表示初始值,第二个值表示条件结束的值,第三个值表示步长,步长可以省略不写,默认为1

for i = 0,10,2 do
        print(i)
end

运行结果:

3. repeat until

重复执行repeat后的代码,直到满足until条件

j = 0
repeat  
        j = j+1
        print(j)
until(j > 4)

运行结果:

五、条件与跳出循环

1. if

if判断来执行满足条件的某些代码

n = nil
if(n == nil) then
        print('n是空')
end

运行结果:

2. break

break用于强制跳出循环

k = 0
while(k < 10) do
        k = k+1
        if(k == 5) then
                break;
        end
        print(k)
end

运行结果:

六、函数

上面数据类型中我们了解到,函数也是可以被作为一个变量,定义函数使用function关键字,函数分为具名函数和匿名函数,具名函数可以通过函数名进行调用,匿名函数只能通过被赋值的函数型变量调用,除了上面的使用外,函数还有以下内容

1. 多值返回

lua中函数可以返回多个值

-- 将参数a,b,a+b作为返回值返回
function moreReturn(a,b)
        return a,b,a+b
end

i,j,k = moreReturn(1,2)

print(i)
print(j)
print(k)

运行结果:

2. 可变参数

使用...传递可变参数

-- 将所有参数相加
function sum(...)
        local sum = 0
        for k,v in pairs({...}) do
                sum = sum + v
        end
        return sum
end

print(sum(1,2,3,4,5))

运行结果:

2.1 含有固定参数

固定参数和可变参数都有的情况,固定参数写在前面

-- 格式化输出
function fmtPrint(fmt,...)
        io.write(string.format(fmt,...))
end

fmtPrint("%d,%s,%d\n",12,'asd',66)

运行结果:

2.2 select函数

lua中select函数可以对可变参数做一定的处理,如获取可变参数长度,截取可变参数

--求平均值
function avg(...)
        local avg = 0
        for k,v in pairs({...}) do
                avg = avg + v
        end

        return avg / select("#",...)
        --return avg / #{...}
end

print(avg(2,4,6,8))

运行结果:

-- 截取可变参数
function limit(limit,...)
        return select(limit,...)
end


a,b,c = limit(2,"a","b","c","d","e")
print(a)
print(b)
print(c)

运行结果:

七、运算符

运算符都是比较常见的,一些我们之前就已经使用过

1. 算术运算符
符号描述
+
-
*
/
%取余
^乘幂
-负号
2. 关系运算符
符号描述
==等于
~=不等于
>大于
<小于
>=大于等于
<=小于等于
3. 逻辑运算符
符号描述
and并且
or或者
not
4. 其他运算符
符号描述
..字符串连接符
#长度计算符
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值