簡體   English   中英

groovy這個基本的閉包怎么了?

[英]groovy what's wrong with this basic closure?

我有以下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:

謝謝

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}" }

String.split()不接受閉包參數。 我認為您可能需要it.split().each { list ->作為第三行。

編輯:它實際上匹配Collection.split(Closure) ,其中閉包用於對內容進行分組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM