深入浅出游戏算法(3)-lua脚本(6)

来源:互联网 发布:kindle软件更新 编辑:程序博客网 时间:2024/05/17 21:43

函数通过以下格式声明:

function 函数名

语句块

return 结果

end

结果可以是一个,下面函数计算最大值:

function maxnum(nums)

        maxnum=nil

        for i,v in ipairs(nums) do

                if(maxnum==nil) then

                        maxnum=v

                elseif (v>maxnum) then

                        maxnum=v

                end

        end

        return maxnum

end

print(maxnum ({20,19,-23,44,68}))

dp@dp:~ % lua test2.lua

68

dp@dp:~ % 

也可以是多个,下面函数同时返回最小和最大值:

dp@dp:~ % vim test.lua 

function maxminnum(nums)

        maxnum=nil

        minnum=nil

        for i,v in ipairs(nums) do

                if(maxnum==nil) then

                        minnum=v

                        maxnum=v

                end

                if (v>maxnum) then

                        maxnum=v

                end

                if (v<minnum) then

                        minnum=v

                end

        end

        return maxnum,minnum

end

print(maxminnum ({20,19,-23,-44,68,21,-80})) 

dp@dp:~ % lua test.lua

68 -80

麦好的AI乐园博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/myhaspl/


unpacktable中的元素一个个提取出来。

比如:

> a={11,22,33}

> print(a)

table: 0x28428ec0

> print(a[0],a[1],a[3])

nil 11 33

> print(a[1],a[2],a[3])

11 22 33

> x=a

> print(x)

table: 0x28428ec0

> print(x[1],x[2],x[3])

11 22 33

> y1,y2,y3=unpack(a)

> print(y1..y2..y3)

112233

> print(y1)

11

> print(y2)

22

> print(y3)

33

可以通过“...”向函数传递多个参数

dp@dp:~ % vim test.lua

function maxminnum(...)

        maxnum=nil

        minnum=nil

        for i,v in ipairs{...} do

                if(maxnum==nil) then

                        minnum=v

                        maxnum=v

                end

                if (v>maxnum) then

                        maxnum=v

                end

                if (v<minnum) then

                        minnum=v

                end

        end

        return maxnum,minnum

end

print(maxminnum (20,19,-23,-44,68,21,-80))

dp@dp:~ % lua test.lua

68 -80

通过传送table,并指定参数名称,达到指定实参的效果

dp@dp:~ % vim test.lua

function xllen(nums)

        x=nums.x

        y=nums.y

        z=nums.z

        return math.sqrt(x*x+y*y+z*z)

end

print(xllen{x=10,y=-9,z=5})

0 0