Unity Lua语言高级进阶 笔记(一)函数的进阶一

一、参数的简化:

函数若只有一个参数,并且此参数是一个字符串或者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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值