2011-09-16 11 views
11

Java 7 wprowadzono automatyczne zarządzanie zasobami:Java 7 styl zarządzania zasobami automatyczny dla Scala

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

to będzie działać z dowolnej klasy, która implementuje java.lang.AutoClosable.

Wiem, że istnieje kilka przykładów automatycznego zarządzania zasobami w Scali, w tym jeden przedstawiony przez Martina Odersky'ego.

Czy jest plan, aby dodać zarządzanie zasobami na poziomie języka do Scala, podobnie jak Java try(...) { }?

+0

Myślę, że lista dyskusyjna [scala-language] byłaby lepszym miejscem do zadawania tego pytania. – missingfaktor

+2

Myślę, że jeśli został dodany, to nie jako funkcja językowa, ale jako część std lib. – ziggystar

+0

Nie zostanie dodana żadna funkcja poziomu języka, ponieważ jest łatwa do wykonania przy użyciu istniejących funkcji językowych, zgodnie z poniższymi odpowiedziami. – sourcedelica

Odpowiedz

13

W scala można to dodać jako bibliotekę. Jako przykład scala-ramię (https://github.com/jsuereth/scala-arm) z jsuereth:

Imperatyw Style:

// 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); 
    } 
} 

monadycznego stylu

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

Na stronie github kilka przykładów

specyfikacje
3

nie jestem świadomy żadnej cechy specjalnie zaprojektowanej do tego w Scala, ale tutaj jest przykład przy użyciu wzorca pożyczki na Java zamykanych:

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

EDIT

Ty możliwe, nawet utwórz bardziej ogólny kredyt, robiąc coś takiego:

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

+1

+1 dla Aloisa :) –

+0

hehe Thomas;) ... @Ralph Właśnie dodałem link do przykładu JPPellet, który jest bardzo ogólny –

2

Scala są dość cienkie, ponieważ prawie wszystko, co można zaimplementować za pośrednictwem standardowej biblioteki, jest. Tak więc nie ma potrzeby dodawania ARM w samym języku.

Do tej pory Scala jako brak rzeczywistego interfejsu API IO (domyślnie dla interfejsu Java IO API). Jest prawdopodobne, że przyszłe API Scala IO będzie zawierało pewną formę ARM. Na przykład scala-io ma ARM.

Powiązane problemy