看到this link之后,我想尝试Groovy ++,但我有一个担心;
Groovy的语法是否在Groovy ++中有效?
例如,我可以在Groovy中执行此操作:
def list = [1,2]
以上代码在Groovy ++中是否有效?
答案 0 :(得分:8)
目标(我相信)是为了尽可能多地支持Groovy代码。
我认为目前有一些领域不起作用,包括:
但您可以随时解决这些问题,或者不要将需要它们的类标记为@Typed
答案 1 :(得分:4)
http://groovy.dzone.com/articles/groovycomparetogroovy-part-1
的代码示例存在差异列表一些差异:
答案 2 :(得分:2)
答案 3 :(得分:1)
a)别担心。无论是groovy还是groovy ++,性能都不是问题。使用这两种语言,您主要编写胶合逻辑。连接各种java库的代码。这些库是用java编写的 - 所以它们全速运行。
有时你会注意到你在groovy中写了很多代码,你想增加一些额外的速度。没问题。 Groovy非常适合您的算法原型。由于Groovy具有类似java的语法并且使用了所有这些java库,因此将原型转换为全速运行的java库是没有问题的(是的,你必须手动编写代码,但这意味着,你'只有'必须从你的groovy代码中删除所有这些短语,把它变成java)。
b)据我所知,groovy ++,它通过注释工作。只有在您注释代码时,它才会被识别为groovy ++代码。所以它应该工作。但正如你从所有这些答案中可以看到的那样,目前并没有太多人使用groovy ++,因为性能不是问题(参见:-)。
顺便说一句:我想那个groovy ++ fork很快就会被合并到标准的groovy主干......
答案 4 :(得分:1)
@Typed(TypePolicy.MIXED)让想要使用groovy ++优化代码的开发人员更加轻松。但是它并不完全支持groovy代码。
使用@Typed(TypePolicy.MIXED)时,即使使用groovy ++代码兼容性仍有问题
e.g。 groovy样式类型转换(使用关键字“as”)
String foo = myUntypedFoo as String
需要更改为
String foo = (String)myUntypedFoo
在闭包之外声明的变量也不能直接在这些闭包中使用:
@Typed(TypePolicy.MIXED)
def countMatches( List<String> bahList, String pattern ){
int counter = 0
bahList.each{ String bah ->
if (bah==pattern) counter++
}
}
需要更改为java样式(违背了groovy ++的目的)或者你必须使用Reference对象。
groovy ++对于提高groovy / grails性能非常有用,但它肯定不是一种简单的方法,我不确定,如果我应该使用java代替。
答案 5 :(得分:0)
Groovy ++引入了@Typed(TypePolicy.MIXED)注释,与Groovy完全兼容。
通过使用@Typed(TypePolicy.DYNAMIC)或根本不使用@Typed,您将失去所有Groovy ++优势。
如果可能,MIXED TypePolicy会优化静态位置。