"using" function

scala, tuples, using

Solution

Starting `Scala 2.13`, the standard library provides a dedicated resource management utility: `Using`.

More specifically, the `Using#Manager` can be used when dealing with several resources.

In our case, we can manage different resources such as your `PrintWriter` or `BufferedReader` as they both implement `AutoCloseable`, in order to read and write from a file to another and, no matter what, close both the input and the output resource afterwards:

import scala.util.Using
import java.io.{PrintWriter, BufferedReader, FileReader}

Using.Manager { use =>

  val in  = use(new BufferedReader(new FileReader("input.txt")))
  val out = use(new PrintWriter("output.txt"))

  out.println(in.readLine)
}
// scala.util.Try[Unit] = Success(())

Problem

I've defined 'using' function as following: ``` def using[A, B <: {def close(): Unit}] (closeable: B) (f: B => A): A = try { f(closeable) } finally { closeable.close() } ``` I can use it like that: ``` using(new PrintWriter("sample.txt")){ out => out.println("hellow world!") } ``` now I'm curious how to define 'using' function to take any number of parameters, and be able to access them separately: ``` using(new BufferedReader(new FileReader("in.txt")), new PrintWriter("out.txt")){ (in, out) => out.println(in.readLIne) } ```

Original source

Related problems