Asp.NET Tutorials
Home > VB.Net语言 > VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure

Hot archives

VisualBasic9.0前沿播报·静态篇(四)嵌套函数和Closure
作者:ninputer 出处:博客园
 
为了支持Linq平台所支持的查询特性,VB9必须引入少量“函数式编程(FP)”的特性。本次所介绍的嵌套函数和Closue特性就是最重要的一个环节。在我们探讨为什么引入这样一些特性之前,先来看看这个特性是什么样的。
VB9允许在过程内部定义函数或子程序,如:
Public Sub MyProc()  Sub Nested()  'Code here  End Sub End Sub 

首先能够想到的第一个用途就是,一个帮助函数(HelperFunction)可以仅供某个过程单独使用,在这个过程外部无法访问到这个过程定义的嵌套函数。这与Delphi的嵌套函数类似。注意,嵌套函数仅可以在定义之后的上下文中访问。下面这个特性就是嵌套函数与传统函数最大的不同:
Add by : Huobazi (2005-8-08:02:38)  
Public Sub MyProc()
    Dim x As Integer
    Sub Nested(i As Integer)
        x = i
    End Sub
    'Invoke subroutine

    Nested(20)
    Console.WriteLine(x);
End Sub

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

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

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

Add by : Huobazi (2005-8-08:02:38)