我最近一直在玩 Groovy,之前也玩过 JRuby,很欣赏.each{}
在他们的集合中使用闭包。
也就是说,我不禁觉得这不过是访问者模式的语法糖。如果您将代码封装在一个类中的闭包主体中,并使用访问者模式传递该类的一个实例,这似乎是完全相同的事情,尽管麻烦较少。
那么,是否还有其他我还没有看到的闭包功能使它们与访问者模式有根本的不同,或者人们真的对这种语法糖感到兴奋吗?
对我来说,这似乎更像是一个图书馆问题而不是语言问题。
这是一个 Java 列表的快速模型,它的行为似乎类似于each
Groovy 列表中的闭包。
public class ClosureList<E> extends ArrayList<E>{
interface Visitor<E>{
void visit( E e );
}
void accept( Visitor<E> v ){
for( Iterator<E> myItr = this.iterator(); myItr.hasNext() )
v.visit( myItr.next() );
}
}
然后就拥有
public class ClosureTest{
public static void main( String[] args ){
ClosureList<String> myList = new ClosureList<String>();
myList.add( "green eggs" );
myList.add( "green ham" );
clStr.accept(
new Visitor<String>(){
void visit( String s ){
System.out.println( s )
}
}
);
}
}
这在 Groovy 中似乎相同:
def l = [ "green eggs", "green ham" ]
l.each{ println it }