Anonymous Method, Lambda Expression & Closure

在看Boo中是如何实现这些之前,我觉得有必要澄清一下它们各自的概念。让我们来从Lambda Expression开始。

Lambda Expression

这 个概念是FP(Functional Programming)的核心概念之一。在FP中,除了函数与表达式(函数的唯一组成部分)之外,不存在任何其他的定义了。函数都可以由一个 lambda表达式来代表。实际上lambda expression说白了就是一条名为lambda的表达式(无名的表达式)。Lambda表达式在FP中应用最广。Python示例:

():
: > = ()
()

 

以 上定义了一个大于的函数,它返回一个lambda expression,可以把这个表达式看做是一个函数,它接受一个参数b,然后与a做比较看谁更大并返回比较结果。随后我们声明了一个变量 isHighWord来代表大于0x80000000的函数。注意在Boo中是不支持Lambda表达式的,不过聪明的你可能已经注意到了,Lambda 表达式可以用Anonymous Method来代替!

Anonymous Method

匿名方法,这个我想大家应该都很熟悉了,C# 2.0的一个新feature,示例如下:

.+= {
.();
};

 

Closure

这个也 是FP语言的一个特性,后来因为它的较强实用性也被许多非FP语言实现了下来。简单地说,一个Closure就是将一段代码当作参数的形式传入到一个函数 中。你会想,这和委托有什么区别呢?有一定的区别,Closure不仅可以将一段代码以参数的形式传入到另一个函数中,还可以使在它scope内所有可见 的变量在传入到的函数中也可见,也就是示例1中b > a的a的来源。

有心人你可能已经注意到了,没错,C# 2.0中的Anonymous Method不仅是一个匿名的delegate,它就是一个closure,在它视线内的变量都可以在匿名方法内看的到。现在你已经意识到了,其实用 Anonymous Method就可以实现Lambda Expression与Closure了,那么下面就让我们真正的来看看在Boo中是如何实现Anonymous Method的,以下是一个完整的可编译的示例:

CavingdeepSample

System
SystemWindowsForms
SystemDrawing

MainFormForm:
clickMeButton Button Buttonconstructor:
clickMeButtonText clickMeButtonLocation PointclickMeButtonClick MessageBoxShowControlsAddclickMeButtonmainForm Form MainFormApplicationRunmainForm

 

怎么样,Boo的语法还不算难懂吧?在Boo中,有两种Anonymous Method有两种定义方法,一种就是用示例中所展示的{},注意在{}中的语句要用;隔开;另一种方法是用def,就像在注释中的那样。Boo的基本语法我就不仔细讲了,与Python差不多,建议大家去Boo的官方网站上看一下。

好了,这篇就讲到这里了,想编译看看结果的朋友可以去下载Boo,然后用这段命令行编译"booc -r:system.windows.forms -t:winexe lambda.boo",另外不要忘了将Boo.Lang.dll同编译好的exe放在一起,否则是不行的哦。

参考

Boo
http://boo.codehaus.org/

Closure
http://www.martinfowler.com/bliki/Closure.html
http://linuxgazette.net/109/pramode.html

转载于:https://www.cnblogs.com/cavingdeep/archive/2005/07/26/200470.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值