在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)
for (i <- 0 until 100) yield (JSON \ "items")(i)
,是否会为每个JSON \ "items"
评估一次“{1}}”或仅评估一次?i
(我不关心项目的顺序
出现在列表中),其中for-expression
是一个JSON对象数组?答案 0 :(得分:0)
如果你使用表达式JSON \ "items"
100次而不是1次,那么找到这些节点的工作量是100倍 - 没有任何majick memoization或类似的东西上。相对于执行它的次数,您的成本是O(n) - 而不是O(1)。但无论如何,对于这种应用而言,差异是无关紧要的 - 假设没有外环你没有向我们展示。
这对于并行化而言太小的bean来说没有任何意义 - 实际上,开销可能会减慢速度。如果你的真实案例是yield expensiveComputationBasedOn(items(i))
,那么也许。
对于第3-4行,是的,如果你需要在这里处理它,请使用Try
,否则更远(在调用调用此方法的方法中)。通常,在最高级别捕获异常,您仍然可以提供有关日志消息中出错的充分信息,您可以在其中执行任何故障恢复,以及您可以在哪里进行调试。这样可以节省工作量并确保您抓住所有内容 - 甚至是您无法想到的内容。如果您在&#34; main&#34;中,那很好。期权不会捕获例外情况。注意:如果是针对某个班级,则无论如何,您的老师可能正在寻找本地错误处理。