--再论闭包
--
下面这个例子 引自
《Groovy in action》
第五章。
一段 Java
代码,
interface ResourceUser {
void use(Resource resource)
}
resourceHandler.handle(new ResourceUser(){
public void use (Resource resource) {
resource.doSomething()
}
});
下面是一段等价 Groovy
的代码。
resourceHandler.handle { resource -> resource.doSomething() }
惊叹吧 ? 8行JAVA代码居然被 Groovy 如此 easy 地实现了。
惊叹! 惊叹之余再来反思。。。
(1),为何能如此简单(Groovy):因为它在使用闭包。
Groovy中
行为元素(函数,过程)作为一级元素。
像resource -> resource.doSomething() 就是一个匿名函数。
参数 为 resource,返回值 为 resource.doSomething()。
(2),为何如此复杂(Java):因为它在模拟闭包。
函数咱没有,那就包装一下,模拟一下,但好像臃肿了点。。
(3),易理解吗?
Groovy
:资源处理器
(名词:resourceHandler)处理
(动词:handle)一个函数
(匿名函数:resource ->
resource.doSomething())。
模拟闭包的Java
:资源处理器
(名词:resourceHandler)处理
(动词:handle)一个资源用户
(名词:new
ResourceUser(){...})。
资源处理器应该只处理资源啊。。。
(4),
重新造句
(Java)
OO的Java
:资源处理器
(名词:resourceHandler)处理
(动词:handle)一个资源
(名词:resource)。
new ResourceHandler(){
protected void handle(Resource resource){
//doSomething ....
resource.doSomething();
//doSomething ....
}
}.handle(request);
个人观点
:
一种功能如果可以用FP中的闭包来实现,
那它必然也可以用OO中的对象来实现,
而且更贴近于人的思维。
有必要用对象模拟闭包吗?个人感觉没必要,
用对象模拟的闭包 来实现一种功能,感觉相比上诉两种情况更复杂。
分享到:
相关推荐
论文研究-基于网络闭包理论的交易型社区网络演化研究.pdf, 随着社会化商务时代的到来,交易型社区的发展越来越成为解决社会化商务中经济性与社会性矛盾的关键.但交易型...
基于对闭包运算的性质研究,引入了闭包算子空间及其之间的连续映射概念,证明了闭包算子空间(对象)及其之间的连续映射(态射)构成范畴(闭包算子范畴)。证明了闭包算子空间范畴中(有限)积和(有限)余积的存在...
原子闭包系统, 原子闭包算子和原子全蕴含系统,杨海建,李庆国,本文引进了原子闭包系统,原子闭包算子以及原子全蕴含系统等概念, 研究了它们之间的相互关系, 给出了由原子闭包系统来表示有限原子�
利用蕴涵运算,在完备剩余格上定义了蕴涵闭包算子,给出了它的若干等价刻画及其表示定理。
三次扩张的整闭包,龚成,,计算有限扩张的整闭包不但是交换代数中的一个核心问题,也很受代数几何以及代数数论发展的推动。 本文在前人研究的基础上,去掉2
研究[n]维空间中[m]个点的最小闭包球(MEB)问题。通过结合确定并删除内部点的技术到序列最小最优化(SMO)方法中,提出一种近似求解MEB问题的改进的SMO-型算法。证明了该算法具有线性收敛性。数值结果表明对于一些...
区别于传统的聚类方法,提出了以类为起点,通过构造闭包进行聚类的新方法,并建立了聚类判别模型,此模型给出了对于闭包间的交叉区域的检验点的判别准则。然后针对二维的聚类问题,提出了以最小圆为闭包的聚类判别...
在完备剩余格上引入了蕴涵闭包系统的概念,讨论了蕴涵闭包系统与闭包系统之间的关系。给出了蕴涵闭包系统的一些性质及其表示定理。进一步研究了蕴涵闭包算子和蕴涵闭包系统的关系。
通过弱化一般拓扑中的闭包算子公理,引入了广义闭包算子的概念,研究了其与稍早引入的广义邻域系的关系。特别的,证明了二者之间存在着自然的完备格同构。
大数据环境下最小单调约束闭包Hadoop并行关联规则,李春青,李海生,针对传统关联规则算法存在较大规则冗余问题,提出基于最小单调约束闭包Hadoop并行化关联规则。首先,基于闭包算子约束规则等价关系
基于卡诺图确定所有候选码和属性集闭包,张亦舜,,关系模式设计过程中,确定所有候选码及任意属性集的闭包是最基本的计算。本文证明此两问题等价于函数依赖图中质蕴含的确定和判断
研究了线性空间中代数闭包和向量闭包的关系,给出了凸集的代数闭包是凸集的新证明,利用代数闭包与向量闭包的关系,得到了一个涉及向量闭包的分离定理。
随着网络的发展和人们沟通方式的扩展,社交网络影响了人们的生活,改变了人们传播与分享消息的方式,吸引了越来越多的人关注和研究社交网络。社交网络即社交网络服务,源自英文 SNS(social network service)的翻译,...
代数交半格和代数并半格的闭包系统表示,吴明渊,李庆国,Domain理论中,各类格序结构的集合表示是一个重要研究课题。一个众所周知的结论是代数闭包系统能表示代数格。本文研究代数闭包系统�
对直觉模糊关系进行了再研究, 提出了直觉模糊关系的核与闭包的概念,得到了直觉模糊关系的十四集定理. 首先,利用直觉模糊逆自反关系、对称关系以及自反关系给出了直觉模糊...
3. 设 R’ 集合A 上的自反关系,且R⊆R’, 则对 1. 输入MR 2. 计数器 k 置初值n-1
On Computing the Transitive Closure of a Relation 计算二元关系的(自反)传递闭包 编译器设计,有名的论文
先建立求解最小体积闭包椭球(MVEE)问题秩-2 更新算法的线性收敛性,然后给出一种简单的积极集策略,每次迭代计算距离当前椭球最远的N个点.结合该策略到秩-2 更新算法中,得到一个求解MVEE问题的积极集算法.数值结果表明...
训练需花费大量时间和空间的问题,提出了基于中心约束最小闭包球的加权多类算法。该算 法首先利用先验知识确定一种新的基于相对紧密度的方法计算样本权值并将其融合到支持向 量机中,然后转化为中心约束的最小闭包球...