如果你的编程语言没有变量捕获功能,如何实现闭包?
2012-11-24 18:37
274 查看
前一个贴子中,我简单回顾了C#2.0中的一些便利特性,包括闭包。现在,我们来看一下,如果没有变量捕获的支持,如何实现闭包。其实,思路不复杂。想一想变量捕获的本质,就明白,它就是对被捕获的变量——局部的或对象上的——作了一层引用而已。那么,如果编程语言不支持这种特性,代替的最简单方法,也就是传递一个对象,其中包含一个成员变量,用这个来代替变量捕获时捕获的局部变量。对于非函数局部变量的捕获,比如对一个对象的属性的捕获,可能需要一定的重构,但并不一定必要,要视具体情况而定。
相关文章推荐
- 在一个程序中需要用到全局变量(在多个class之间共享数据),请问如何定义具有这种功能的变量?或者是否有其他的方法解决多个class之间的数据共享(尽量简单实现)。 首先应该明确 Java中没有全局变
- 在页面中,我们经常看到,一个button按钮,如果属标点击,就会触发一个窗口的显示,如果二次点击并可以隐藏,那么如何通过JAVA配合html来实现这一功能呢?
- 【c语言】模拟实现strchr函数,功能:在一个字符串中查找一个字符第一次出现的位置,如果没有出现返回NULL
- 如何打印一个类的属性(例如textview里的控件等,基于oc里没有绝对的私有变量这一规则实现)
- android:如果手机安装了app则打开一个activity,如果没有安装则去到android market如何在HTML页面实现
- 如果编程语言(例如PHP)和SQL(例如MySQL)都能实现某个功能,我们是用编程语言实现还是SQL?
- Go语言如何在没有实现功能的情况下写出完善的单元测试代码
- 如果没有提交按钮,怎么实现提交功能呀!!!
- android:如果手机安装了app则打开一个activity,如果没有安装则去到android market如何在HTML页面实现
- 如果主存中的某页正在与外部设备交换信息,缺页中断时可以将这一页淘汰吗?为了实现正确的页面调度,应如何扩充页表的功能?
- ios简单实现如果没有开启定位,提示开启系统软件定位功能
- 如何实现插入时如果不存在则插入如果存在则更新的操作(分别用oracle、MySQL和SQL Server实现)
- C#编译器是如何判定某个变量没有使用过的?
- C#中如何实现JAVA中的String.replaceAll()方法功能
- JS中如何实现sleep(休眠)的功能?
- 如何在App中实现IM功能之一离线消息常见浅析——箭扣科技Arrownock
- VFW实例程序。简单 “视频捕获”,没有压缩、线程、保存、等更多的功能
- Xcode .m实现文件 关键字没有提示,不提示代码补全功能,问题解决。
- android/iPhone:如何从browser直接打开应用程序或者打开应用商店(如果没有应用程序)