Lua函数干系示例代码 - --脚本型语言,不能先调用,再定义,因为代码是从上往下执行的
- --第一种声明函数
- function func1()
- print("这是func1")
- end
- --先定义,再调用,没有问题
- func1()
- ------------------------------------------------------
- --将函数定义为一个变量,函数是一种数据类型
- local func2=function()
- print("这是func2")
- end
- func2()
- --------------------------------------------------
- local func3=function(a,b)
- print(a+b)
- end
- --函数的调用,参数可以多于形参,但是不能少于形参
- func3(5,7)
- func3(5,7,9)
- ----------------------------------------------------
- local func4=function(...)
- --将无固定参数,转换为table
- --arg的作用域是func4函数体
- local arg={...}
- local total=0
- for k,v in pairs(arg)
- do
- total=total+v;
- end
- print(total)
- end
- func4(1,2,3)
- func4(1,2,3,4)
- --------------------------------------------
- function func5()
- return 99,100
- end
- --将多返回值,同时赋值给两个变量
- local num1,num2=func5()
- print(num1,num2)
- --丢掉数值接受
- local _,n2=func5()
- print(n2)
复制代码 Lua的表(table)干系示例代码:- --Table支持数字索引存储数据
- --Table支持字符串索引(关联索引)存储数据
- local data={one="cc","aa","bb",[4]=3,[-1]=4,["two"]="dd"}
- print(data[2])
- print(data["one"])
- print(data.two)
- data.func1=function()
- print("data表中的func1函数")
- end
- --所以data.func1调用数据,是个函数,也就调用了函数
- data.func1()
- -----------------------------------------------------
- data.func2=function()
- print(data.two)
- end
- data.func2()
- -----------------------------------------------------
- --第一种self调用写法
- --成员函数定义时,显示加入self变量,对应C#的this关键字
- --函数内部可以通过self变量获取当前table的其他值或函数
- data.func3=function(self)
- print(self.two)
- end
- --调用时,必须使用":",因为":"调用,会对self关键字赋值
- data:func3()
- -----------------------------------------------------
- --第二种self调用写法
- --隐式给self赋值
- function data:func4()
- print("func4:"..self.two)
- end
- data:func4()
复制代码 Lua的require语法干系示例代码:- --实现代码的切分
- --将提供的Lua文件中的代码执行一下
- --文件名中包含特殊字符,比如".",会导致加载错误
- --文件扩展名".lua"不需要编写,因为会自动添加
- require("HelloWorld")
- --表会记录已经加载的文件记录
- print(package.loaded["requireTest"])
- package.loaded["requireTest"]=nil
- --当每次加载文件时,都会检查package.loaded里面的内容,防止重复加载
- --package.loaded存储的是加载的路径字符串
- --所以如果想重复多次加载一个文件,则需要再次加载前清除这个状态
- require("requireTest")
- --加载文件的相对路径
- --"./"表示当前编写的Lua文件,所在的目录
- --"../"表示当前编写的lua文件,所在的上级目录
- --获取另一个文件的局部变量
- --子文件的return会返回给主文件的变量
- local config=require("config")
- print(config.appName)
- --全局变量可以跨文件直接获取,但十分不推荐(安全性低,极容易被覆盖)
复制代码 此为config文件中的内容
Lua元表干系示例及代码:- local t1={1,2,3}
- --直接打印表,显示的是内存地址
- --希望打印table时,以人类易于阅读的结构显示例:{1,2,3},方
- --便调试
- --打印时,就是将表作为字符串输出
- --实现的功能,当需要将表作为字符串使用时,应该有一种办法
- --这种办法,Lua提供了这种语法特性,metatable扩展,元表扩展
- print(t1)
- local meta={
- --用于扩展t1的元表,只要在元表中实现一些特殊的函数,
- --则t1就可以实现一些特殊功能,比如让t1作为字符串可以使用
- __tostring=function(t) --元方法,当被扩展的表被以string方式调用时,调用
- local format="{"
- for k,v in pairs(t)
- do
- format=format..v..","
- end
- format=format.."}"
- return format
- end
- }
- setmetatable(
- t1, --需要进行元表扩展的数据表
- meta
- )
- setmetatable(
- t2, --需要进行元表扩展的数据表
- meta
- )
- --t1会被传递给t
- print(t1)
- print(t2)
复制代码 Lua小实践
得到不规则Table的正确长度- local TOOL={}
- function TOOL:table_count(t)
- local count=0
- for k,v in pairs(t)
- do
- count=count+1
- end
- return count
- end
- local data={one="cc","aa","bb,",[4]=3,[-1]=4,["two"]="dd"}
- print(TOOL:table_count(data))
复制代码
使用函数将无固定值的参数举行排序(冒泡排序法),并返回参数个数 - function maopao(...)
- local nums={...}
- --print(nums[1])
- for i = 1,#nums
- do
- for j = 1,#nums-i
- do
- if(nums[j]>nums[j+1])
- then
- local tmp=nums[j]
- nums[j]=nums[j+1]
- nums[j+1]=tmp
- end
- end
- end
- return #nums,nums
- end
- local l,t = maopao(7,1,23,8,99,26)
- print(l)
- print("------------------------------------")
- print(t[1])
- print(t[2])
- print(t[3])
- print(t[4])
复制代码
使用元表的_add元方法,实现两个Table的全部元素的归并 - local t1 = {1,2,3}
- local t2 = {4,5,6}
- local meta={
- __add=function(t1,t2)
- local new_t={}
- for k,v in pairs(t1)
- do
- --将数据插入到一个表中,List.Add()
- table.insert(new_t,v)
- end
- for k,v in pairs(t2)
- do
- table.insert(new_t,v)
- end
- return new_t
- end,
- __tostring=function(tt)
- local format="{"
- for k,v in pairs(tt)
- do
- format = format..v..','
- end
- format=format.."}"
- return format
- end
- }
- setmetatable(t1,meta)
- local t3 = t1 + t2
- setmetatable(t3,meta)
- print(t3)
复制代码
该系列专栏为网课课程条记,仅用于学习参考。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|