1

Scala 2.11、以下のコードがあります。

import play.api.libs.json._
...
val data = // read json from file                             (3)
val JSON: JsValue = Json.parse(data mkString "\n")            (4)
val items = JSON \ "items"
for (i <- 0 until 100) yield items(i)
  1. 最後の 2 行を結合した場合for (i <- 0 until 100) yield (JSON \ "items")(i)、用語JSON \ "items"はそれぞれに対して評価されますiか、それとも 1 回だけ評価されますか?
  2. これでリストの構築を並列化する価値はあり for-expressionますか (アイテムがリストに表示される順序は気にしません)、itemsJSON オブジェクトの配列はどこにありますか?
  3. 行 (3 - 4) で JSON を解析して例外を処理し、それを検証する最良の方法は何ですか?
4

1 に答える 1

0
  1. JSON \ "items"を 1 回ではなく 100 回使用すると、それらのノードを見つけるのに 100 回の作業が必要になります。魔法のメモ化などは行われません。あなたのコストは、O(1) ではなく、実行回数に対して O(n) です。しかし、いずれにせよ、このアプリケーションの違いは重要ではありません - あなたが私たちに示していない外側のループがないことを前提としています.

  2. これは、並列化が意味をなすには小さすぎる Bean です。実際、オーバーヘッドによって処理が遅くなる可能性があります。あなたの本当のケースがだったら、yield expensiveComputationBasedOn(items(i))多分。

  3. 3 ~ 4 行目では、はい、Tryここで処理する必要がある場合はここを使用し、それ以外の場合はさらに上 (これを呼び出したメソッドを呼び出したメソッド内) を使用します。一般に、ログ メッセージで何が問題なのかについて十分な情報を提供できる最高レベルで例外をキャッチし、どこで障害回復を行い、どこでデバッグできるようにします。これにより作業が節約され、思いもよらないことも含めてすべてを把握できます。それがあなたの「メイン」にあるなら、結構です。Option は例外をキャッチしません。注意: これがクラスの場合、教師はローカル エラー処理を探している可能性があります。

于 2015-04-21T02:15:12.000 に答える