是否所有Groovy代码都适用于Groovy ++?

时间:2011-09-06 09:52:41

标签: groovy groovy++

看到this link之后,我想尝试Groovy ++,但我有一个担心;

Groovy的语法是否在Groovy ++中有效?

例如,我可以在Groovy中执行此操作:

def list = [1,2]

以上代码在Groovy ++中是否有效?

6 个答案:

答案 0 :(得分:8)

目标(我相信)是为了尽可能多地支持Groovy代码。

我认为目前有一些领域不起作用,包括:

  1. Multiple assignment - doesn't compile
  2. spread-dot operator会导致问题in some situations
  3. .with {} doesn't work
  4. 但您可以随时解决这些问题,或者不要将需要它们的类标记为@Typed

答案 1 :(得分:4)

http://groovy.dzone.com/articles/groovycomparetogroovy-part-1

的代码示例存在差异列表

一些差异:

  • 更严格的编译时检查
  • 使用ExpandoMetaClass进行动态类型修改
  • 闭包不能更改闭包代码外的变量
  • 无法直接访问私有方法

答案 2 :(得分:2)

应该是因为在Groovy ++中你可以:

  • 轻松混合静态和动态类型代码

参考:http://code.google.com/p/groovypptest/wiki/Welcome

答案 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会优化静态位置。