有趣的問題。
這裏的關鍵問題是,你需要通過反覆進行一些狀態。要做到這一點
的一種方法是使用一個外部變量(在這裏我使用字符串數組和List#each
,而不是一個文件,並File#eachLine
,但他們應該是相似的):
def lines = [
"Single line.",
"Long \\",
"line \\",
"continuation.",
"Single line."
]
def processLine(line) { println "Processing \"$line\""}
def continuation = ''
lines.each { line ->
line = continuation + line
if (line.endsWith('\\')) {
continuation = line.take(line.size() - 1)
}
else {
processLine(line)
continuation = ''
}
}
另一個方法是使用專門設計的攜帶狀態,儘管interations,像Collection#inject
一個迭代器:
lines = lines.inject([]) { list, line ->
if (list && list[-1].endsWith('\\'))
list[-1] = list[-1][0..-2] + line
else
list << line
list
}
lines.each { processLine(it) }
在這種情況下,我們首先加入繼續行,然後處理它們。
在這兩種情況下,輸出是:
Processing "Single line."
Processing "Long line continuation."
Processing "Single line."
我通常使用一個裝飾圍繞這樣的迭代器:https://gist.github.com/ataylor284/5389604 – ataylor