C# LUA 闭包
许多语言中有闭包的概念,C#的闭包以lambda表达式表现,可以实现与LUA完全一样的效果。
//LUA------------------------------------------------
function test()
local i =
return function () -- 匿名函数
i = i +
return i
end
end
c1 = test()//一般情况下,函数是使用栈来存储变量i的,出了函数后i会被释放
c2 = test()//一般情况下,函数是使用栈来存储变量i的,出了函数后i会被释放
//出了test()的作用域,再测试test()中的局部变量i是否仍然正常运作
print(c1(), c1)
print(c2(), c2)
print(c1(), c1)
print(c2(), c2)
//输出
function: 00C9BA00
function: 00C9B780
function: 00C9BA00
function: 00C9B780
//C#---------------------------------------------------
1 delegate int CN();
static CN test()
{
int i = ;
CN cn = () => { return i = i + ; }; return cn;
}
static void Main()
{
CN c1 = test();//一般情况下,函数是使用栈来存储变量i的,出了函数后i会被释放
CN c2 = test();//一般情况下,函数是使用栈来存储变量i的,出了函数后i会被释放
//出了test()的作用域,再测试test()中的局部变量i是否仍然正常运作
Console.WriteLine(c1());
Console.WriteLine(c2());
Console.WriteLine(c1());
Console.WriteLine(c2());
}
//输出:
1
1
2
2
可以看到,效果完全一样, 可见,闭包的原理在C#与LUA中是一样的,理解这两种语言的闭包概念的两篇文章:
闭包是造成内存泄露的罪魁祸首,在大型游戏项目中LUA造成的内存泄漏有一大部分是由于复杂的脚本逻辑间闭包的相互作用导致资源没有及时的释放掉造成的。C#项目也是如此。
C# LUA 闭包的更多相关文章
- LUA闭包概念演示
闭包的一个重要场景,形成一个自治的环境, 让操作可以封闭运行, 即函数运行时有状态的,可以从闭包创建时候的环境独立开来. 例如下面的lua闭包, genFilter 其入参parmIn是 函数的内部变 ...
- 对 Lua闭包 知识点的学习的总结 ,在这里和大家分享一下,希望对大家有所帮助
Lua闭包 --当一个函数内部嵌套另外一个函数定义时,内部的函数体可以访问外部的函数的局部变量,这种特征为词法定界.--闭包是由函数与其相关的引用环境组合而成的实体 闭包=函数+引用环境--不是在局部 ...
- 关于lua闭包导致引用无法释放内存泄露
最近项目存在严重的内存泄漏问题,每次切level 会增加20M无法释放的内存,翻遍了项目用了多个工具,查询资料等 发现项目中两种存在内存泄露的情况 1.lua闭包的不当使用,对比包的引用要及时 释放. ...
- lua闭包与简易迭代器实现
1.什么是闭包 闭包,又称闭合函数(closure).通常,如果将一个函数写在另一个函数内,那么这个在内部的函数就可以访问到外部函数中的局部变量,这个特征就是词法域,有些资料上也叫它词法定界.闭包指的 ...
- lua闭包浅析及项目应用
lua函数与闭包: 原文地址:http://www.doc88.com/p-6681238341344.html 近日查阅关于lua的一些资料,找到了我能理解的关于lua函数与闭包的解析,我觉得这个程 ...
- lua闭包函数
function createCountdownTimer(second) local ms = second * local function countDown() ms = ms - retur ...
- lua 闭包
--匿名函数使用upvalue i保存他的计数, 闭包是一个函数加上它可以正确访问的upvalues function newCounter() return function() i = i + r ...
- lua闭包
function MakeCounter() return function() t = t + return t end end local func = MakeCounter() , do pr ...
- lua闭包实现迭代器遍历数组
--实现访问数组的迭代器 function visit(t) return function() i = i + return t[i] end end --要访问的数组 ,,,} itor = vi ...
随机推荐
- iOS证书失效
iOS证书突然失效 今早上班打包直接报错,错误如图 根据错误信息到“钥匙串”里面看了一下证书,证书都莫名其妙的失效了,昨天还是好好的. 重新去钥匙串从证颁发中心获取证书,然后登陆开发者账号重新申请证书 ...
- windows下vagrant使用及工作环境配置
环境搭建记录(2014-08-01) 操作系统: Win7旗舰版 Vagrant版本: 1.6 搭建过程 安装vagrant 右键打开安装包按照提示安装即可 安装后会自动把vagrant添加到环境变量 ...
- 调用iframe中父页面/子页面中的JavaScript方法
今天做公司的内部流程系统,发现一问题.怎么调用iframe外面的方法呢?于是百度了一下,呵呵,把搜索结果摘抄下来. 转自:http://hi.baidu.com/zh_m_zhou/blog/item ...
- C# 3个线程A B C 依次打印123123123..
C#经典面试题: 有3个线程,A线程打印1,B线程打印2,C线程打印3,请用程序实现依次打印123123123... class Program { static void Main(string[] ...
- ppt
放映时 F5是从头开始放映, shift+F5是从当前页开始放映 在菜单->幻灯片放映->勾选 “使用演讲者视图” 就可以在播放时看到自己的备注
- 读书笔记——Windows核心编程(2)禁止C运行时触发的所有Debug Assertion Failed对话框
1 定义一个函数 void _invalid_parameter( const wchar_t * expression, const wchar_t * function, const wchar_ ...
- Count and Say
Count and Say https://leetcode.com/problems/count-and-say/ The count-and-say sequence is the sequenc ...
- POJ 2299 Ultra-QuickSort(线段树入门)
Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Description In this problem, you have to ana ...
- [瞎JB写] C++多态
似乎只能通过引用或者指针进行动态多态...蛋疼的语法 #include <iostream> #include <vector> #include <memory> ...
- Docker与容器快速入门
Docker之风席卷全球,但很多人觉得docker入门确实不太容易,其原因在于很多知识点上没准备好,在docker解决了什么问题.怎么解决的.用什么技术解决的都还没想清楚的时候就去探索docker组件 ...