• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Lua的学习值类型传递、引用类型传递、闭包、尾调用、迭代器(链) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

-------------------- 值类型传递

 

--[[
a=10;
b=20;
function math(x,y)
    x=20;
    y=30;
    return x+y;
end

 

foo= math;
print(foo(a,b));
print(a);
print(b);
--]]

 

-------------------- 值类型传递

 

--[[
tab={
    a=10;
    b=20;
}

 

function math(x,y)
    x=20;
    y=30;
    return x+y;
end

 

foo= math;
print(foo(tab.a,tab.b));
print(tab.a);
print(tab.b);
--]]

 

-------------------- 值类型传递

 

--[[
a="10";
b="20";
function math(x,y)
    x="20";
    y="30";
    return x+y;
end

 

foo= math;
print(foo(a,b));
print(a);
print(b);
--]]




-------------------- 值类型传递

 

--[[
tab={
    a="10d";
    b="20w";
}

 

function math(x,y)
    x="20dd";
    y="30ww";
    return x..y;
end

 

foo= math;
print(foo(tab.a,tab.b));
print(tab.a);
print(tab.b);
--]]



-------------------- 引用类型传递

 

--[[
tab={
    a=10;
    b=20;
}

 

function math(tab)
    tab.a=20;
    tab.b=30;
    return tab.a..tab.b;
end

 

foo= math;
print(foo(tab));
print(tab.a);
print(tab.b);
--]]



-------------------- 闭包

 

--[[

 

function func(x,y)
    local i =0;
    return function()
        i=i+1;
        return x..y..i
    end
end



print("-----闭包-----")
fun= func(1,2);--这里的fun 返回的是 func(x,y) 这个函数
print(fun())   --这里的fun() 返回的是 func(x,y) 里面的 匿名 function() 这个函数
print(fun())
print(fun())
print(fun())
print("-----非闭包-----")
print(func(1,2)());
print(func(1,2)());
print(func(1,2)());
print(func(1,2)());

 

--]]

 

-------------------- 尾调用



--[[

 

function func(n)
    if n <= 0 then
        print("---");
        return 0;
    end
    local a = func(n-1)
    print(a);
    return n * a;
end



func(10000000000000);
--]]



--[[

 

function func(n, now)
    if n <= 0 then
        print("---");
        return now
    end
    print("---");
    return func(n-1, now*n)
end

 

func(10000000000, 1)



--]]

 

-------------------- 迭代器(链)

 

--[[
function travel(list)
    local function work(list,node)
        if not node then 
            return list;
        else
            return node.next;--这里的对象将返回给 迭代器的 变量列表,同时也会成为迭代函数的  状态变量 参数。
        end
    end
    return work,list,nil;--这里返回的是 迭代函数,状态变量,控制变量
end

 

lists = nil
lists={index=1,next=lists};
lists={index=2,next=lists};
lists={index=3,next=lists};

 

for i=4,8 do
    lists={index=i,next=lists};
end



for node in travel(lists)   do  --这里的 travel(lists)  不是迭代函数,而是一个普通函数,但是这个普通函数 的返回值 为三个 对象. 这三个对象 才是迭代器所需要的的 迭代函数,状态变量,控制变量
    print(node.index);
end

 

--]]






鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua中 table 重构index/pairs元方法优化table内存占用发布时间:2022-07-22
下一篇:
Lua 元表(Metatable)发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap