看到这个链接后,我想试试Groovy++,但我有一个担心;
Groovy 的所有语法在 Groovy++ 中都有效吗?
例如,我可以在 Groovy 中执行此操作:
def list = [1,2]
上面的代码在 Groovy++ 中有效吗?
目标(我相信)是让它支持尽可能多的 Groovy 代码。
我相信目前有一些领域不起作用,包括:
但是您总是可以解决这些问题,或者不要将需要它们的类标记为@Typed
在http://groovy.dzone.com/articles/groovycomparetogroovy-part-1有一个与代码示例的差异列表
一些不同之处:
a) 别担心。groovy 和 groovy++ 都不是性能问题。使用这两种语言,您主要编写胶合逻辑。连接各种java库的代码。这些库是用 java 编写的——因此它们可以全速运行。
有时你注意到你已经用 groovy 写了一大段代码,你想增加一些额外的速度。没问题。Groovy 非常适合对您的算法进行原型设计。由于 Groovy 具有类似 java 的语法并使用所有这些 java 库,因此将您的原型转换为全速运行的 java 库是没有问题的(是的,您必须手动编写代码,但这意味着,您只需'必须从您的 groovy 代码中删除所有这些快捷方式才能将其转换为 java)。
b)据我了解groovy ++,它通过注释工作。仅当您注释代码时,它才会被识别为 groovy++ 代码。所以它应该工作。但正如您从所有这些答案中看到的那样,目前使用 groovy++ 的人并不多,因为性能不是问题(见 :-)。
顺便说一句:我猜 groovy++ fork 很快就会被合并到标准的 groovy 主干中......
@Typed(TypePolicy.MIXED) 让想要使用 groovy++ 优化代码的开发人员的生活变得更加轻松。但是它并不完全支持 groovy 代码。
即使使用 @Typed(TypePolicy.MIXED) 的 groovy++ 代码兼容性仍然存在问题
例如 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。
Groovy++ 引入了@Typed(TypePolicy.MIXED) 注解,完全兼容Groovy。
通过使用 @Typed(TypePolicy.DYNAMIC) 或根本不使用 @Typed,您将失去所有 Groovy++ 优势。
如果可能,MIXED TypePolicy 会优化静态位置。