私はScala 2.9 try ... catchフィーチャーを読んで実験しました。それは可能性を考えています。数行のコードを保存する以外に実際に私は何を使用しますか?Scala 2.9のtry ... catch一般化のユースケースは何ですか?
答えて
ユースケースは、アプリケーション全体の一般的なエラーハンドリングを持ってできるようにすることです。たとえば、管理者に電子メールを送信してアプリケーション内のFileNotFoundException
をすべて処理したいとします。以前は、このようにそれを行う必要があるだろう:
// Globally
val fileNotFound: PartialFunction[Throwable, Unit] = {
case e: FileNotFoundException =>
// Create report and send the e-mail
}
// On each try-catch-block
try {
// Open file
}
catch {
case fnf: FileNotFoundException => fileNotFound(fnf)
}
今、あなただけの操作を行います。
try {
// Open file
} catch fileNotFound
また、これはあなたがorElse
メソッドを使用してそのようないくつかの例外ハンドラをリンクすることができます素敵な利点を持っています
val fileErrors = fileNotFound orElse endOfFile orElse invalidFormat
そして、ファイル例外処理が必要な場所であればどこでも使用できます。このようなエラーハンドラは、例えば、アプリケーションの構成ファイルに基づいて動的に組み合わせることができる。これはどこでもパターンマッチングと正しいハンドラを呼び出すよりもはるかに面倒ではありません。部分関数の上に魅惑することができ
一つの有用な事は二つの部分の機能上のシーケンシング事業者として働きandAlso
演算子、です。これは、一般的なエラー処理を行った後に、特定のtry-catchブロックに固有のエラー処理を行う場合に便利です。
implicit def pf2ops(pf: PartialFunction[Throwable, Unit]) = new {
def andAlso(localpf: PartialFunction[Throwable, Unit]) = new PartialFunction[Throwable, Unit] {
def apply(t: Throwable) = {
if (pf.isDefinedAt(t)) pf(t)
localpf(t)
}
def isDefinedAt(t: Throwable) = pf.isDefinedAt(t) || localpf.isDefinedAt(t)
}
}
そして、あなたがこれを行うことができます。
scala> try {
| throw new java.io.FileNotFoundException
| } catch fnf andAlso {
| case e: Exception => println("I don't know, but something is specific to this particular block.")
| }
I don't know, but something is specific to this particular block.
は、私はあなたがandAlso
の正確な意味と意味(と名前)でさらにプレイできると思います。
ニースの答え - 私はまた私も欠けていた部分だったと思います。 – Seth
良い答えが、私はその導入のための本当の理由は何か他のものだと思います。 try
/catch
/finally
取り扱いは特殊なケースを導入しました。部分的な関数リテラルを使用しましたが、実際に部分的なリテラルに置き換えることはできませんでした。さて、catch
はちょうど部分的な機能を受け取り、その言語のもう1つの特別なケースはなくなりました。
- 1. Scala DRYing try/catch
- 2. djangoのクラスベースの一般的なビューのユースケースは何ですか
- 3. Scala 2.9の標準小数点の型は何ですか?
- 4. try-catch文で囲むべきコードブロックのタイプは何ですか?
- 5. エラーはのtry/catch
- 6. Scalaの2.9ブリッジ法
- 7. このtry catchで何が問題なのですか?
- 8. try catch catch webdriverのカスタムウェイト
- 9. try-catchブロックは
- 10. try/try catch関数でR
- 11. Try Timer in Try Catch
- 12. ScalaのScalaのTry/Catchブロックが例外をキャッチできません
- 13. try catchブロックでvalオブジェクトをどのように初期化できますか?
- 14. Scalaの "try"とは、catchまたはfinallyブロックなしで何を意味しますか?
- 15. ()try {} catch {}
- 16. 何が良いですか:int.TryParseまたはtry {int.Parse()} catch
- 17. 一般的なゲームのユースケース図
- 18. クラスを一般化する際のポイントは何ですか?
- 19. ラムダ式を使ってjavaで一般的なtry catchメソッドを実装することは可能ですか?
- 20. try/catchブロックからのブレーク
- 21. try-catchブロックは必要ですか?
- 22. 違いのtry/catch /スローとのtry/catch(e)の間/スロー電子
- 23. ランタイムエラー私はのtry-catch
- 24. 変更デフォルトはのtry-catch
- 25. _.attemptは()のtry/catchが
- 26. のtry/catch構文
- 27. のtry/catchがクラス
- 28. アプリケーションのtry..catchブロック
- 29. 違い「のtry-catch」
- 30. Arduinoのtry/catchブロック
私はそれを使用するかどうかはわかりませんが、* any *(適合)PartialFunction ...他の場所で統一されたエラー処理を使用できますか? ( 'ignoreTheseSillyClosableExceptions'を言う。)また、Scalaはインスピレーションのためにその;-) –
のようにそれを表現できること「それだけでクールだ」:彼はこれを実装したときにポール・フィリップスは、動機付けの例を提供する:http://www.scala-lang.org/node/8070 –
質問は、例または少なくともリンクを使ったほうがよいでしょう。 – ziggystar