1

我对 groovy 很陌生,查看一些现有的代码,我看到了:

def timestamp = event.timestamp[]

我不明白这一行的空方括号在做什么。请注意,此处定义的时间戳应该接收一个长值。

在这段代码中,event是在我们庞大的代码库中的其他地方定义的,所以我不确定它是什么。我以为它是一张地图,但是当我在地图上使用这个符号编写一些单独的测试代码时,方括号导致一个空值被分配给时间戳。然而,在上面的代码中,括号是获得正确(非空)值所必需的。

一些快速的谷歌搜索并没有太大帮助(很难在“[]”上搜索)。

编辑:原来 event 和 event.timestamp 都是 zero.core.groovysupport.GCAccessor 对象,正如下面的答案所说, [] 必须在这些对象上调用 getAt() 并返回一个值(在这种情况下,一个 long )。

4

3 回答 3

2

方括号将调用该getAt(Object)对象的底层方法,因此该行可能正在调用该对象。

我做了一个小脚本:

class A { 
    def getAt(p) { 
        println "getAt: $p"
        p 
    }
}
def a = new A()
b = a[]
println b.getClass()

它返回作为参数传递的值。在这种情况下,一个ArrayList. 也许那个时间戳对象上有一些元编程。def timestamp运行代码后包含什么?

还要检查你的 groovy 版本。

于 2012-09-11T17:48:39.830 回答
0

空列表,找到了这个。这里有点相关/可能有用的问题

于 2012-09-11T16:56:10.260 回答
0

不是在计算机上,但看起来它正在调用该方法event.timestamp并将一个空列表作为参数传递。

与以下相同:

def timestamp = event.timestamp( [] )
于 2012-09-11T17:40:24.963 回答