J'essaye d'écrire une méthode d'assistance simple qui reçoit quelque chose qui peut être fermé et une fonction qui reçoit le premier et qui s'assure que le "fermable" est fermé après l'exécution de la fonction.Pourquoi ce type de structure lié ne fonctionne pas comme prévu?
Par exemple, je veux l'utiliser comme ceci:
closing(new FileOutputStream("/asda"))(_.write("asas"))
Mon impl est
object Helpers {
def closing[T <: { def close }](closeable: T)(action: T => Unit): Unit =
try action apply closeable finally closeable close
}
Mais en essayant de compiler ce test simple:
object Test {
import Helpers._
closing(new FileOutputStream("/asda"))(_.write("asas"))
}
Le compilateur se plaint de:
arguments de type inférées [java.io.FileOutputStream] ne pas sont conformes au type limites des paramètres de fermeture de la méthode [T <: AnyRef {def fermé: Unité}]
Toutes les idées pourquoi?
Et 'FileOutputStream.write' ne peut apparemment pas prendre de chaîne. Appelez 'getBytes()' sur la chaîne. – Malvolio