一个接受File
的简单函数和一个将为该文件传递PrintWriter
的函数:
def printToFile(f: java.io.File)(op: java.io.PrintWriter => Unit) {
val p = new java.io.PrintWriter(f)
try { op(p) } finally { p.close() }
}
如何将此概括为任意数量的File
,同时将生成的PrintWriter
传递给一个函数?我想决定在客户端函数中使用哪个PrintWriter
。
我想要一个类似于(psuedocode)的签名:
def printToFile(f: java.io.File*)(op: (java.io.PrintWriter*) => Unit)
以下是我要编写客户端函数的方法:
printToFile(new File("file1.txt"), new File("file2.txt"), new File("file3.txt")) {
(file1PrintWriter, file2PrintWriter, file3PrintWriter) =>
// do stuff, decide which PrintWriter to write to
}
两种* ed类型的基数相同。
重要的是,我希望客户端功能能够声明收到的PrintWriter
变量,而不仅仅是Seq[PrintWriter]
或类似的处理。
答案 0 :(得分:0)
我看起来你需要创建与参数数量一样多的PrintWriter
个实例。以下应该有效。
import java.io._
object Foo {
def printToFile(files: File*)(op: (PrintWriter*) => Unit) {
val printers: Seq[PrintWriter] = files.map(file => new PrintWriter(file))
try {
op(printers :_*)
} finally {
printers.foreach(_.close)
}
}
}