敬业的IT人 >> 编程开发 >> .Net技术 >> VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure

VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure

敬业的IT人 互联网 佚名 2008-5-23 19:55:01
作者:ninputer 出处:博客园   为了支持Linq平台所支持的查询特性,VB9必须引入少量“函数式编程(FP)”的特性。本次所介绍的嵌套函数和Closue特性就是最重要的一个环节。在我们探讨为什么引入这样一些特性之前,先来看看这个特性是什么样的。 VB9允许在过程内部定义函数或子程序,如:
VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图一) VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图二)Public Sub MyProc()Sub MyProc() VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图三)VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图四) Sub Nested()Sub Nested() VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图五) 'Code here VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图六) End Sub VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图七)End Sub 首先能够想到的第一个用途就是,一个帮助函数(HelperFunction)可以仅供某个过程单独使用,在这个过程外部无法访问到这个过程定义的嵌套函数。这与Delphi的嵌套函数类似。注意,嵌套函数仅可以在定义之后的上下文中访问。下面这个特性就是嵌套函数与传统函数最大的不同: VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图二)Public Sub MyProc()Sub MyProc() VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图五) Dim x As Integer VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图三)VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图四) Sub Nested()Sub Nested(i As Integer) VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图五) x = i VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图六) End Sub VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图五) 'Invoke subroutine VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图五) VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图五) Nested(20) VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图五) Console.WriteLine(x); VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure(图七)End Sub

嵌套函数可以访问到外部过程中的变量,这个特性叫做Closure。有了Closure,我们就可以生成规则可变化的函数,以便实现延迟计算,这就是FP一个基本功能。VB9的内嵌函数Closure可能是通过Tuple特性来实现的,不过目前还没有关于原理的进一步计算。VB9内嵌函数相对于C#的匿名函数,主要有两个优点:

1。无需委托即可调用,可反复调用。当需要委托时,可通过addressof获取。
2。可直接递归。(当然,高手可以用Y算子,后话了……)

visual Basic还考虑增加匿名内嵌函数的表达方式,就是众所周知的Lambda表达式。但是目前还没有语法放出来,我就先不介绍了。

Add by : DevEduSiteMaster (2005-6-21:01:21)  进入讨论组讨论。 更多专题 【深 度 阅 读】 相 关 文 章 ·Visual Basic .NET中操作MsAgent
·用VisualC#动态生成组件
·Visual Basic .NET 中动态加载类
·用VisualC#.NET编写服务器日期控件
粤ICP备06119539号
Copyright CiscoSky.Org,Some Rights Reserved.
Email:me1228#tom.com