groovy这个基本闭包有什么问题?

时间:2011-11-15 17:42:12

标签: groovy

我有以下groovy代码:

dataFile.filterLine() {it =~ /(${searchStr1}|${searchStr2})/ }.each { it ->
    println it
    it.split { list ->
        println "split line:  ${list[0]},  ...."
    }
}

第一个println效果很好 - 列出所有匹配的行。然后,分裂导致错误,实际上在第二个println上。显然它不喜欢$ {list [0]}。但是,我不清楚这有什么问题。

错误是:

No signature of method: org.codehaus.groovy.runtime.DefaultGroovyMethods$4.getAt() is applicable for argument types: (java.lang.Integer) values: [0]
Possible solutions: getAt(java.lang.String), putAt(java.lang.String, java.lang.Object), wait(), grep(), getClass(), wait(long). Stacktrace follows:

由于

2 个答案:

答案 0 :(得分:2)

filterLine不会返回您的想法;它是Writable,包含输入文件中的所有匹配项。

这是一个最小的例子:

f = new File("/home/dave/.bashrc")
w = f.filterLine({ it =~ /alias/ })
println w.class

s = w.toString()
println s

s.eachLine { println "==> ${it}" }

答案 1 :(得分:1)

String.split()不接受闭包参数。我想你可能想要it.split().each { list ->作为第三行。

编辑:它实际上匹配Collection.split(Closure),其中闭包用于对内容进行分组。