一、参数的简化:
函数若只有一个参数,并且此参数是一个字符串或者table构造式,则(实参)圆括号可以省略,这种语法现象称为“参数的简化”。
--函数参数简化
--“实参”是字符串时
function SetName( str )
print("请设置您的昵称:"..str)
end
SetName("sdf")
--如果“实参”是字符串则原()可以去掉
SetName "Ng"
--“实参”是Table形式
function SetNameArray(nameArray)
for i,v in ipairs(nameArray) do
print(v)
end
end
numArray={1,4,5,6,23,5}
SetNameArray {1,4,5,6,23,5}
二、可变参数:用...来表示
1.可变参数写法
--可变参数
function MultiParaVal(...)
for i,v in pairs({...}) do
print(v)
end
end
--测试“可变参数”
MultiParaVal("sde","xiang")
2.可用arg来代替{...},利用#得到输入参数的个数
--可变参数
function MultiParaVal(...)
print("输入参数的个数",#arg);
for i,v in pairs(arg) do
print(v)
end
end
--测试“可变参数”
MultiParaVal("sde","xiang")
3.注意事项:
- 如果变长参数中可能包含nil,则必须使用“select”来访问变长参数。调用select事必须传入一个固定的实参和一一系列变长参数。
--select("#",...)表示,返回可变参数的长度
--不能与arg一起用
--select(i,...)表示,返回从索引数值到可变参数的所有内容
function MultiParaVal(...)
for i=1,select("#",...) do
--值介绍返回数组的第一个值
num =select(i,...)
print(num)
end
end
--测试“可变参数”
MultiParaVal("sde","xiang",nil,"sed")
三、标准函数库
1.数学函数库:
--绝对值
print(math.abs(-88))
--最大值
print(math.max(12,3,4,5))
--最小值
print(math.min(12,3,4,5))
--正弦
print(math.sin(0))
--余弦
print(math.cos(0))
--平方根
print(math.sqrt(23))
--取整 返回不大于输入数值的整数(取整)
print(math.floor(19,23))
--伪随机数
print(math.randomseed(4000))--随机因子
print(math.random(1,10))--根据随机因子产生
2.操作系统库
--得到日期
print(os.date())
--得到时间
print(os.time())
3.根据操作系统库和数学函数库做一个真正随机数
function GetTrueRandom(min,max)
--得到时间字符串
local strTime =tostring(os.time())
--得到一个反转字符串
local strRev=string.recerse(strTime)
--得到前6位
local strRandomTime=string.sub(strRve,1,6)
--复制时间种子
math.randomseed(strRandomTime)
--返回随机数
return math.random(min,max)
end
四、函数尾调用
1.定义:使用return返回另一个函数,
function FunA( )
return math.abs(-88)
end
function FunB( )
return FunA()
end
2.递归算法中,尾调用的作用(因为尾调用不占用“堆栈”空间,所以不会出现“栈溢出”)
主要是节省空间
--尾调用
function RecurFunc( num)
if (num>0) then
return RecurFunc(num-1)
else
return "End!"
end
end
--非尾调用
function RecurFunc1( num)
if (num>0) then
return RecurFunc1(num-1)+0
else
return "End!"
end
end
RecurFunc(1000000)--不会报错
RecurFunc1(1000000)--会报错
3.尾调用中的括号作用
function Func( )
return FunD()--返回所有值 100,200
end
function Func1( )
return (FunD())--只返回第一个值 100
end
function FunD( )
return 100,200
end
五、函数的本质
1.函数即使一个变量
GetNum=function( num )
return num
end
2.函数可以存储在表中
function GetNum1( )
end
function GetNum2( )
end
funArray={}
funArray[1]=GetNum1
funArray[2]=GetNum2
提取码:c7o0