2011-09-16 22 views
11

Java 7 ha introducido la gestión automática de recursos:Java gestión automática de recursos 7 estilo de Scala

try (BufferedReader br = new BufferedReader(new FileReader(path))) { 
    return br.readLine(); 
} 

Esto funciona con cualquier clase que implemente java.lang.AutoClosable.

Sé que hay varios ejemplos de gestión automática de recursos en Scala, incluido uno demostrado por Martin Odersky.

¿Hay algún plan para agregar una administración de recursos de nivel de idioma a Scala, similar a la de Java try(...) { }?

+0

Creo que la lista de correo [scala-language] sería un mejor lugar para hacer esta pregunta. – missingfaktor

+2

Creo que si se agregó, no como una función de idioma sino como parte de la biblioteca estándar. – ziggystar

+0

No se agregará ninguna función de nivel de idioma, ya que es fácilmente factible utilizar las funciones de idioma existentes, según las respuestas a continuación. – sourcedelica

Respuesta

13

En scala esto se puede agregar como una biblioteca. Como ejemplo scala-brazo (https://github.com/jsuereth/scala-arm) de jsuereth:

imperativo Estilo:

// Copy input into output. 
for(input <- managed(new java.io.FileInputStream("test.txt"); 
    output <- managed(new java.io.FileOutputStream("test2.txt")) { 
    val buffer = new Array[Byte](512) 
    while(input.read(buffer) != -1) { 
    output.write(buffer); 
    } 
} 

estilo Monádica

val first_ten_bytes = managed(new FileInputStream("test.txt")) map { 
    input => 
    val buffer = new Array[Byte](10) 
    input.read(buffer) 
    buffer 
} 

En la página GitHub son algunos ejemplos más

especificaciones
3

No estoy al tanto de cualquier rasgo especialmente diseñado para que en Scala, pero aquí es un ejemplo usando el patrón del préstamo en Java que puede cerrarse:

http://whileonefork.blogspot.com/2011/03/c-using-is-loan-pattern-in-scala.html

EDITAR

Puede incluso hacer un préstamo más genérico haciendo algo como:

https://stackoverflow.com/questions/5945904/what-are-your-most-useful-own-library-extensions/5946514#5946514

+1

+1 para Alois :) –

+0

jeje Thomas;) ... @Ralph Acabo de agregar un enlace al ejemplo de JPPellet que es muy genérico –

2

Scala están bastante delgada, porque casi todo lo que se puede implementar a través de la biblioteca estándar es. Por lo tanto, no hay una necesidad real de agregar ARM en el idioma en sí.

Hasta ahora, Scala no tiene una IO API real (por defecto en Java IO API). Es probable que una futura API de Scala IO incluya alguna forma de ARM. Por ejemplo, scala-io tiene ARM.

Cuestiones relacionadas