2011-01-12 72 views
1

如果我写Groovy的闭包语法

test = { 
    println("Hello world"); 
} 

,负责创建一个名为测试变量封闭,我可以test();

然而

test: { 
    println("Hello world"); 
} 

调用立即调用关闭和我不能用test();

第二种语法的用途是什么?

回答

4

这看起来像一个普通的旧标签的Java代码块。不是Groovy闭包语法。这将允许您在块内限定局部变量。如果它是一种替代语法,我会避免它。

public void do(){ 
test:{ 
    String hello = "hello"; 
} 

anotherTest:{ 
    String hello = "hello"; 
} 
} 
+1

它只是一个标签的代码块,而不是另一种定义闭包的方式。当然,OP可能会试图制作一个闭包地图,例如:map = [test:{println'Hi'}]`这是一个非常有效的闭包定义 – 2011-01-12 16:02:44

+1

感谢您的额外洞察。我在发布后几乎删除了我的答案,因为我可能只是扮演'Obvious上尉'而不提供任何帮助。 – 2011-01-12 16:05:00

1

这样做时,您不需要定义闭包,而是需要标记一个代码块。

确实,作为this page states,Groovy支持老式标签。

是。这也是一个给我的惊喜。