2011-09-16 14 views
11

जावा 7 के लिए स्वत: संसाधन प्रबंधन स्वचालित संसाधन प्रबंधन शुरू की है।जावा 7 शैली स्काला

मुझे पता है कि स्कैला में स्वचालित संसाधन प्रबंधन करने के कई उदाहरण हैं, जिनमें मार्टिन ओडर्स्की द्वारा प्रदर्शित एक भी शामिल है।

जावा के try(...) { } के समान, स्कैला में भाषा-स्तर संसाधन प्रबंधन जोड़ने की कोई योजना है?

+0

मुझे लगता है कि [स्कैला-भाषा] मेलिंग सूची इस प्रश्न से पूछने के लिए एक बेहतर जगह होगी। – missingfaktor

+2

मुझे लगता है कि अगर इसे जोड़ा गया था, तो भाषा सुविधा के रूप में नहीं बल्कि std lib के हिस्से के रूप में। – ziggystar

+0

नीचे दिए गए उत्तरों के अनुसार मौजूदा भाषा सुविधाओं का उपयोग करके आसानी से करने योग्य कोई भी भाषा स्तर सुविधा नहीं होगी। – sourcedelica

उत्तर

13

स्कैला में इसे लाइब्रेरी के रूप में जोड़ा जा सकता है।

पहल शैली:: एक उदाहरण स्केला हाथ (https://github.com/jsuereth/scala-arm) jsuereth से के रूप में

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

Monadic शैली

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

GitHub पृष्ठ पर कुछ और उदाहरण

3

मैं विशेष रूप से स्काला में उस के लिए तैयार किया गया है किसी भी लक्षण के बारे में पता नहीं कर रहा हूँ, लेकिन यहाँ जावा बंद करने योग्य पर ऋण पद्धति का उपयोग कर एक उदाहरण है:

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

संपादित

आप कर सकते हैं कुछ ऐसा करने से भी अधिक सामान्य ऋणदाता बनाते हैं:

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

+1

एलोइस के लिए +1 :) –

+0

हेहे थॉमस;) ... @ राल्फ मैंने अभी जेपीपेलेट उदाहरण के लिए एक लिंक जोड़ा है जो बहुत सामान्य है –

2

स्काला चश्मा कर रहे हैं बहुत पतला, क्योंकि लगभग हर चीज जिसे मानक पुस्तकालय के माध्यम से कार्यान्वित किया जा सकता है, है। इस प्रकार भाषा में एआरएम जोड़ने की कोई वास्तविक आवश्यकता नहीं है।

अब तक, कोई असली आईओ एपीआई (जावा आईओ एपीआई पर डिफ़ॉल्ट) के रूप में स्कैला। यह संभव है कि भविष्य में स्कैला आईओ एपीआई में एआरएम का कुछ रूप शामिल होगा। उदाहरण के लिए, scala-io में एआरएम है।

0

हल्के वजन (कोड की 10 पंक्तियां) एआरएम बेहतर फाइलों के साथ शामिल है। देखें: https://github.com/pathikrit/better-files#lightweight-arm

import better.files._ 
for { 
    in <- inputStream.autoClosed 
    out <- outputStream.autoClosed 
} in.pipeTo(out) 
// The input and output streams are auto-closed once out of scope 
संबंधित मुद्दे