“à l'aide de la fonction”

J'ai défini " à l'aide de la fonction comme suit:

def using[A, B <: {def close(): Unit}] (closeable: B) (f: B => A): A =
  try { f(closeable) } finally { closeable.close() }

Je peux l'utiliser comme ça:

using(new PrintWriter("sample.txt")){ out =>
  out.println("hellow world!")
}

maintenant, je suis curieux de savoir comment le définir à l'aide de la fonction de prendre n'importe quel nombre de paramètres, et être en mesure d'y accéder séparément:

using(new BufferedReader(new FileReader("in.txt")), new PrintWriter("out.txt")){ (in, out) =>
  out.println(in.readLIne)
}
  • Dupliquer: stackoverflow.com/questions/2207425/...
  • Ne closeable.close() à l'intérieur d'un try, ou vous pouvez le masque d'exceptions dans f(closeable).
  • Connexes stackoverflow.com/q/7602804/243233
  • Généralement, j'ai le nom il 'clôture' non seulement parce qu'il utilise mais surtout, ferme le flux alors que la vraie "à l'aide" est réservé pour de simples def using[T](t: T)(f: T => Unit): T = {f(t) ; t}, ce qui est utile dans le cas où vous obtenez la valeur et que vous voulez revenir comme un résultat, mais de faire quelque chose avant que val v = obtain; printlnt(v) ; v. Donc, vous écrivez, passThrough(obtenir){println}.
  • J'ai mis en place une version différente de "l'aide", qui est plus robuste et utilise Essayer de capturer des exceptions: stackoverflow.com/a/34277491/501113