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. 如果我将最后两行合并for (i <- 0 until 100) yield (JSON \ "items")(i),该术语JSON \ "items"会被评估一次i还是只评估一次?
  2. 将列表构造与此并行化是否值得 for-expression(我不关心项目在列表中出现的顺序),itemsJSON对象数组在哪里?
  3. 处理 (3 - 4) 行中的 JSON 解析异常并对其进行验证的最佳方法是什么?
4

1 回答 1

0
  1. 如果您使用表达式JSON \ "items"100 次而不是 1 次,则将需要 100 倍的工作来找到这些节点 - 不会发生 majick memoization 或类似的事情。相对于执行它的次数,您的成本是 O(n),而不是 O(1)。但无论如何,对于这个应用程序来说,差异是无关紧要的——假设没有外循环,你没有向我们展示。

  2. 这对于并行化来说太小了,没有任何意义——事实上,开销可能会减慢速度。如果你的真实情况是yield expensiveComputationBasedOn(items(i)),那么也许。

  3. 对于第 3-4 行,是的,Try如果您需要在此处处理它,请在此处使用,否则在更远的位置(在调用调用 this 的方法的方法中)。通常,在最高级别捕获异常,您仍然可以在日志消息中提供有关问题的充分信息,您可以在哪里进行任何故障恢复,以及您可以在哪里进行调试。这可以节省工作并确保您捕捉到所有内容——即使是您没有想到的。如果那在您的“主要”中,那很好。Option 不会捕获异常。注意:如果这是针对课程的,无论如何,您的老师可能正在寻找本地错误处理。

于 2015-04-21T02:15:12.000 回答