7

看到这个链接后,我想试试Groovy++,但我有一个担心;

Groovy 的所有语法在 Groovy++ 中都有效吗?

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

def list = [1,2]

上面的代码在 Groovy++ 中有效吗?

4

6 回答 6

8

目标(我相信)是让它支持尽可能多的 Groovy 代码。

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

  1. 多重赋值 - 不编译
  2. 扩展点运算符在某些情况下可能会导致问题
  3. .with {} 不起作用

但是您总是可以解决这些问题,或者不要将需要它们的类标记为@Typed

于 2011-09-06T12:32:48.237 回答
4

在http://groovy.dzone.com/articles/groovycomparetogroovy-part-1有一个与代码示例的差异列表

一些不同之处:

  • 更严格的编译时检查
  • 无需使用 ExpandoMetaClass 进行即时类型修改
  • 闭包不能改变闭包代码之外的变量
  • 不能直接访问私有方法
于 2011-09-06T12:40:57.543 回答
2

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

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

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

于 2011-09-06T11:56:32.293 回答
1

a) 别担心。groovy 和 groovy++ 都不是性能问题。使用这两种语言,您主要编写胶合逻辑。连接各种java库的代码。这些库是用 java 编写的——因此它们可以全速运行。

有时你注意到你已经用 groovy 写了一大段代码,你想增加一些额外的速度。没问题。Groovy 非常适合对您的算法进行原型设计。由于 Groovy 具有类似 java 的语法并使用所有这些 java 库,因此将您的原型转换为全速运行的 java 库是没有问题的(是的,您必须手动编写代码,但这意味着,您只需'必须从您的 groovy 代码中删除所有这些快捷方式才能将其转换为 java)。

b)据我了解groovy ++,它通过注释工作。仅当您注释代码时,它才会被识别为 groovy++ 代码。所以它应该工作。但正如您从所有这些答案中看到的那样,目前使用 groovy++ 的人并不多,因为性能不是问题(见 :-)。

顺便说一句:我猜 groovy++ fork 很快就会被合并到标准的 groovy 主干中......

于 2011-09-06T14:51:38.973 回答
1

@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。

于 2012-01-19T19:14:51.047 回答
0

Groovy++ 引入了@Typed(TypePolicy.MIXED) 注解,完全兼容Groovy。

通过使用 @Typed(TypePolicy.DYNAMIC) 或根本不使用 @Typed,您将失去所有 Groovy++ 优势。

如果可能,MIXED TypePolicy 会优化静态位置。

于 2011-11-01T08:06:33.230 回答