Lua基础

Lua的基础


环境安装

curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make linux test
make install

函数

    optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
        function_body
        return result_params_comma_separated
    end
  • optional_function_scope:该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字本地。
  • result_params_comma_separated:函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。
多返回值
function doublereturn()
    return 1,2
end

local a,b = doublereturn()
print(a,b)

~ 1,2
可变参数
function add(...)
    local sum = 0
    local arg = {...}  --将参数赋予局部变量arg
    for i,v in pairs(arg) do
        sum = sum + v
    end
    return sum
end
  • 可通过select('#',...)返回可变参数的长度:对于i = 1,选择('#',...)做
  • select(n,...)用于访问n到select('#',...)的参数:local arg = select(i,...)

运算符

常见运算符不举例了,有个需要注意的地方是Lua的数字都是按照双进行操作,所以不会像cpp那样整数除法省略小数,如果需要省略小数的话用t1,t2 = math.modf(x / Y);第一参数返回整数部分,第二个参数返回小数部分

符运算优先级从高到低

^
not    - (负数)
*      /
+      -
..
<      >      <=     >=     ~=     ==
and
or

迭代器

无状态迭代器ipairs

for key,value in ipairs(array) 
do
   print(key, value)
end
  • 首先,初始化,计算在后面表达式的值,表达式应返回泛型为需要的三个值:迭代函数,状态常量,控制变量;与多值赋值一样,如果表达式返回的结果个数不足三个会自动用零补足,多出部分会被忽略。
  • 第二,将状态常量和控制变量作为参数调用迭代函数(注意:对于用于结构来说,状态常量没有用处,仅仅在初始化时获取他的值并传递给迭代函数)。
  • 第三,将迭代函数返回的值赋给变量列表。
  • 第四,如果返回的第一个值为零循环结束,否则执行循环体。
  • 第五,回到第二步再次调用迭代函数

多状态迭代器

很多情况下,迭代器需要保存多个状态信息而不是简单的状态常量和控制变量,最简单的方法是使用闭包,还有一种方法就是将所有的状态信息封装到表内,将表作为迭代器的状态常量,因为这种情况下可以将所有的信息存放在表内,所以迭代函数通常不需要第二个参数。


内存处理

设置一个表a并且初始化,这时再设置一个表b将赋值给b,此时a与b都指向同一个内存,相当于指针,如果通过a修改该内存的数据,b同时也会生效。当把一个制为零后,b同样可以访问该内存,而当把b也制为零后,Lua中的内存回收机制会判断该内存已经没有引用从而清理相对应的内存


元表

通过修改元方法来实现两个表之间的操作

  • setmetatable(table,metatable):对指定表设置元表(metatable),如果元表(metatable)中存在__metatable键值,setmetatable会失败
  • getmetatable(table):返回对象的元表(metatable)
__index元方法
tableA = setmetable({key1 = "value1"}, {
    __index = function(tableA, key)
        if key = "key2" then
            return "metatablevalue"
        else
            return nil
        end
    end
})
  • tableA表赋值为{key1 =“value1”}
  • tableA设置了元表,元方法为__index。
  • 在tableA表中查找key1,如果找到,返回该元素,找不到则继续。
  • 在tableA表中查找key2,如果找到,返回metatablevalue,找不到则继续
  • 判断元表有没有__索引方法,如果__index方法是一个函数,则调用该函数。
  • 元方法中查看是否传入“key2”键的参数(tableA .key2已设置),如果传入“key2”参数返回“metatablevalue”,否则返回tableA对应的键值
__newindex元方法

当你给表的一个缺少的索引赋值,解释器就会查找__newindex元方法:如果存在则调用这个函数而不进行赋值操作

比如
mymetatable = {}
MYTABLE = setmetatable({键1 =“VALUE1”},{__newindex = mymetatable})

mytable.newkey =“value2”

这时因为调用了一个mytable的没有的索引,所以他不会进行赋值,而是通过newindex找到mymetatable,并对mymetatable.newkey进行赋值

操作符
模式描述
__加+
__sub-
__mul*
__div/
__mod
__unm- (负数)
__concat..(拼接)
__eq==
__lt<
__le<=

文件I / O

file = io.open (filename [, mode])
  • io.read()
  • io.tmpfile():返回一个临时文件句柄,该文件以更新模式打开,程序结束时自动删除
  • io.type(file):检测obj是否一个可用的文件句柄
  • io.flush():刷新缓冲区
  • io.lines(可选文件名):返回一个迭代函数,每次调用将获得文件中的一行内容,当到文件尾时,将返回nil,但不关闭文件

PS:案例摘自菜鸟教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的纺织品企业财务管理系统,源码+数据库+毕业论文+视频演示 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升,也为了对纺织品企业财务信息进行更好的维护,纺织品企业财务管理系统的出现就变得水到渠成不可缺少。通过对纺织品企业财务管理系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 纺织品企业财务管理系统通过MySQL数据库与Spring Boot框架进行开发,纺织品企业财务管理系统能够实现对财务人员,员工,收费信息,支出信息,薪资信息,留言信息,报销信息等信息的管理。 通过纺织品企业财务管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。 关键字:纺织品企业财务管理系统,薪资信息,报销信息;SpringBoot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值