Lua-- 函数

print("******* Function ******* ")
-- function 函数名()
-- end
-- 或者
-- a = function()
-- end

-- print("******* 无参数无返回值 ******* ")
function F1()
    print("F1 function")
end
F1()

-- 有点类似C#中的委托和事件
F2 = function ()
    print("F2 function")
end
F2()

-- print("******* 有参数 ******* ")
function F3(a)
    -- print("params:" .. a)
    print(a)
end
F3(1)
F3("1234")
F3(true)    -- boolean类型不能做拼接操作
-- 如果传入的参数和函数参数不匹配
-- 不会报错,会补空nil 或者 截断(丢弃)后面的参数
F3()        -- 会返回nil, 空类型也不能进行拼接操作
F3(1,2,3)

-- print("******* 有返回值 ******* ")
function F4(a)
    return a
end
temp = F4("1234")
print(temp)
-- 返回多返回值
function F4(a)
    return a, "123", true
end
temp = F4(3)        -- 后面多余的返回值会被截断丢弃
print(temp)
-- 在前面声明多个变量来接取
temp1, temp2, temp3 = F4(3)
print(temp1)
print(temp2)
print(temp3)
-- 如果接取的变量多了,直接赋值为nil
temp1, temp2, temp3, temp4 = F4(3)
print(temp1)
print(temp2)
print(temp3)
print(temp4)

-- print("******* 函数的类型 ******* ")
-- 函数的类型就是function
F5 = function ()
    print("123")
end
print(type(F5))

-- print("******* 函数的重载 ******* ")
-- 函数名相同, 参数类型不同, 或者参数个数不同
function F6()
    print("F5") ''
end
function F6(str)
    print(str)
end

-- Lua不支持重载,只会默认调用最后声明的函数
-- F6()   -- 返回 nil
F6("STR")

-- print("******* 变长参数 ******* ")
function F7(...)
    arg = {...}
    for i = 1, #arg do
        print(arg[i])
    end
end
F7(1,2,4,5,6,7)
F7(1,2,"3",true);

-- print("******* 函数嵌套 ******* ")
function F8()
--[[
    F9 = function ()
      print("In F9")
   end
   return F9
]]
   return function ()
       print("In F9")
   end
end

f9 = F8()
f9()

-- 在Lua中闭包的体现是什么? 即 函数嵌套
-- 在函数里面返回一个函数,改变函数里变量的生命周期
function F9(x)
    -- 改变了传入参数x的生命周期
    return function (y)
        return x + y
    end
end

f10 = F9(10)        -- 传入参数x,通常来说F9()函数执行完后参数x生命周期即结束,但是现在函数中的嵌套改变了x的生命周期
print(f10(5))       -- 传入参数y,此时x依然有效

但是要注意在Lua中没有递归的概念!!!!如果在函数中调用另一个函数,那么被调用的函数执行完成后不会返回调用函数的地址,因此没有栈的概念,可以无限迭代下去

a = function(n)
    if n > 0 then
        print("in if " .. n)
        return a(n-1)
    end

    n = n + 2
    print("out if " .. n)
end

a(4)

在上面这个例子中,只有在 【n == 0】 的时候才会执行 【n = n + 2】,n = 4, 3, 2, 1执行的时候不会执行【if】之后的语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值