如何在varargs变量上调用findResults

时间:2015-11-03 16:28:25

标签: groovy

我已经编写Groovy大约3天了(来自Python)并且对varargs感到有些困惑。

我有这个:

def wtf(Integer ...vals) {
  println vals.getClass()
  filtered = vals.findResults{ it > 4 ? it : null }
}

wtf(1, 2, 3, 4, 5, 6, 7)

产生:

class [Ljava.lang.Integer;
groovy.lang.MissingMethodException: No signature of method: [Ljava.lang.Integer;.findResults() is applicable for argument types: (Script1$_wtf_closure1) values: [Script1$_wtf_closure1@5bcf875d]
Possible solutions: findResult(groovy.lang.Closure), findResult(java.lang.Object, groovy.lang.Closure)

所以我的val vararg似乎是一种没有findResults方法的类型。

从文档http://docs.groovy-lang.org/latest/html/gapi/org/codehaus/groovy/runtime/DefaultGroovyMethods.html看来,该方法似乎来自Collection,这听起来像是类似列表的对象的相当普通的基类。

那么... vararg的类型是什么?它似乎是[Ljava.lang.Integer,但我不确定Groovy术语中究竟是什么意思。为什么它给我一个无用的类型?

2 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,我认为思考为什么Groovy的设计方式并不是很有成效。

php artisan serve --port=80

答案 1 :(得分:0)

[Ljava.lang.Integer

是Java命名中的一个整数数组...(即:Integer[]

所以你只需要将它列入一个列表:

def wtf(Integer ...vals) {
    filtered = vals.toList().findResults{ it > 4 ? it : null }
}