我定义了以下 'using' 函数:
def using[A, B <: {def close(): Unit}] (closeable: B) (f: B => A): A =
try { f(closeable) } finally { closeable.close() }
我可以这样使用:
using(new PrintWriter("sample.txt")){ out =>
out.println("hellow world!")
}
现在我很好奇如何定义一个“using”函数以接受任意数量的参数,并能够单独访问它们:
using(new BufferedReader(new FileReader("in.txt")), new PrintWriter("out.txt")){ (in, out) =>
out.println(in.readLIne)
}
try
语句块内执行closeable.close()
,否则可能会在f(closeable)
中掩盖异常。 - Daniel C. Sobraldef using[T](t: T)(f: T => Unit): T = {f(t) ; t}
,在你获取某个值并希望将其作为结果返回之前做一些事情的情况下非常有用,例如val v = obtain; printlnt(v) ; v
。所以,你可以这样写,passThrough(obtain){println}。 - Valentin Tihomirov