चलो कुछ स्कालाज़-स्ट्रीम दस्तावेज़ों से एक उदाहरण लें, लेकिन सैद्धांतिक मोड़ के साथ।स्केलज़-स्ट्रीम में कार्य से अपवाद को लॉगिंग और अनदेखा करना
import scalaz.stream._
import scalaz.concurrent.Task
val converter: Task[Unit] =
io.linesR("testdata/fahrenheit.txt")
.filter(s => !s.trim.isEmpty && !s.startsWith("//"))
.map(line => fahrenheitToCelsius(line.toDouble).toString)
.intersperse("\n")
.pipe(text.utf8Encode)
.to(io.fileChunkW("testdata/celsius.txt"))
.run
// at the end of the universe...
val u: Unit = converter.run
इस मामले में फ़ाइल बहुत अच्छी तरह से कुछ गैर डबल स्ट्रिंग शामिल हो सकता है, और fahrenheitToCelsius
कुछ NumberFormatException
फेंक देते हैं। आइए मान लें कि इस मामले में हम शायद इस त्रुटि को लॉग करना चाहते हैं और आगे स्ट्रीम प्रोसेसिंग के लिए इसे अनदेखा करना चाहते हैं। ऐसा करने का बेवकूफ तरीका क्या है? मैंने कुछ उदाहरण देखे हैं, लेकिन वे आमतौर पर collectFrom
स्ट्रीम करते हैं।
शायद Scalaz के लिए बहुत मुहावरेदार नहीं कदम है, लेकिन आप मानचित्रण के लिए और मामले में यह विफल रहा है 'Try' उपयोग कर सकते हैं, त्रुटि लॉग ऑन रास्ता आप चाहते हैं (शायद इस तरह: https://github.com/scalaz/scalaz-stream/blob/master/src/test/scala/scalaz/stream/examples/WritingAndLogging.scala#L63)। –