我已经编写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术语中究竟是什么意思。为什么它给我一个无用的类型?
答案 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 }
}