2007-05-15
我们真的需要Java Closures(闭包)吗?
现在所有的人都在谈论着closures,谈论着如何将它加入到Java spec里.每个人都有自己的观点...上至官方,下至草根.... 已经达成一致意见的声明发布了又被驳倒,这些致使closures成为这些年讨论的最多的Java话题.
甚至有很多经验丰富的Java开发人员都在想closures是什么? Brian Goetz, of Sun Microsystems, 写了一篇很棒的文章: overview of closures and talks about the proposals in front of the JCP. 简言之,(下面是由 docman.cn 翻译家 提供的翻译)
一个闭包是一个包含若干自由变量的代码块;这些变量不用在代码块或者任何全局上下文中定义,而是在定义这个代码块的环境中定义 "closure"的名字来自于它们是代码块的组合,而这些代码块相对于变量引用语法来说不是闭合的,其中的变量是自由变量,这些代码在运算环境(作用域)中被执行,自由变量在环境中被绑定值.
目前来说,最类似的事就是JAVA对匿名类的支持了 增加闭包功能对于用类似JAVA这种强类型语言进行系统设计的改变意义重大,因为类型不仅指的是类和基本类型,还要表示代码
Smalltalk, Scheme, Ruby 以及其他语言都首选通闭包使函数成为很棒的对象. 函数能被储存在变量中,并且可以作为参数传递给其他函数,可以动态的创建以及从其他函数返回。 解决这个问题并非很容易,现在至少有两种提案 包括 Concise Instance Creation Expressions and BGGA Nominal Closures.
根据Neal Gafter(the Nominal Closures提议的合著人)的说法, 方案已经达成共识,--尽管在发表这篇文章时,还没有第三方肯定这种说法.
你认为如何? 这些提议会被认定吗? 意见真的达成一致了吗?还是BGGA人过分乐观了!
评论
realdah
2007-08-31
不是有reflection了么。。。-__-!
要不java以后再搞点预编译宏,搞点全局函数和全局变量好了。。
和C++没啥区别了都。。。
要不java以后再搞点预编译宏,搞点全局函数和全局变量好了。。
和C++没啥区别了都。。。
realzhang
2007-08-30
hamlet 写道
倒是蛮像动态语言的,特别像perl
我用了很多年perl了,怎么看不出?你说说哪里像?
hamlet
2007-08-30
倒是蛮像动态语言的,特别像perl
hpq852
2007-08-29
Java1.4 + Groovy
charon
2007-08-29
xly_971223 写道
simohayha 写道
< K,V, throws X >
void for eachEntry(Map < K,V > map, {K,V => void throws X} block)
throws X {
for (Map.Entry < K,V > entry : map.entrySet()) {
block.invoke(entry.getKey(), entry.getValue());
}
}
看看java 7的代码,简直无语.
火星语言!
这个比较强。就是太罗嗦。但是比以前要干净明白多了。
jonson
2007-08-28
xly_971223 写道
simohayha 写道
< K,V, throws X >
void for eachEntry(Map < K,V > map, {K,V => void throws X} block)
throws X {
for (Map.Entry < K,V > entry : map.entrySet()) {
block.invoke(entry.getKey(), entry.getValue());
}
}
看看java 7的代码,简直无语.
火星语言!
xly_971223
2007-05-15
simohayha 写道
< K,V, throws X >
void for eachEntry(Map < K,V > map, {K,V => void throws X} block)
throws X {
for (Map.Entry < K,V > entry : map.entrySet()) {
block.invoke(entry.getKey(), entry.getValue());
}
}
看看java 7的代码,简直无语.
火星语言!
Norther
2007-05-15
确实有点繁琐了,从JAVA刚诞生时的相对于C++的简洁到现在,几乎从一个极端走向另一个极端,应该大改一下了,否则。。。期待JAVA8.。
找不着北
2007-05-15
Norther 写道
有几句是我翻译的 嘿嘿
好像大部分都是你翻译的!
dovecat
2007-05-15
hurricane1026 写道
simohayha 写道
看看python,ruby的代码,再看看java的代码,唉。
和最最丑陋的c++的一堆Template。。。。比起来都差不多了。。。。
simohayha
2007-05-15
看看python,ruby的代码,再看看java的代码,唉。
dovecat
2007-05-15
说实话,其实在出java tiger的时候,我就觉得java有往丑陋方向演化的倾向...现在...个人觉得,果不其然.看来可以换个方向了.
simohayha
2007-05-15
< K,V, throws X >
void for eachEntry(Map < K,V > map, {K,V => void throws X} block)
throws X {
for (Map.Entry < K,V > entry : map.entrySet()) {
block.invoke(entry.getKey(), entry.getValue());
}
}
看看java 7的代码,简直无语.
dovecat
2007-05-15
希望JAVA不要往丑陋的方向变.
简洁点...
简洁点...
Norther
2007-05-15
有几句是我翻译的 嘿嘿
dennis_zane
2007-05-15
看了下讨论中的语法,相比于动态语言的简洁,实在是很丑陋!-_-
- 浏览: 14830 次
- 性别:


- 详细资料
搜索本博客
最近加入圈子
最新评论
-
样式表里两种样式选择器能 ...
请阅读 JavaEye论坛提问的智慧
-- by Readonly -
样式表里两种样式选择器能 ...
我是想实现这样一个效果<ul> <li id='a1'>< ...
-- by 找不着北 -
样式表里两种样式选择器能 ...
用逗号阿.class1, #idid { ...}
-- by Readonly -
办事拖沓人的七种习惯(翻 ...
好好学习下 有太多的不足了啊
-- by youzhaxuegao -
办事拖沓人的七种习惯(翻 ...
看来自己还有很多地方都需要改呢。。。。。。
-- by canofy






评论排行榜