【发布时间】:2014-07-22 16:41:29
【问题描述】:
我有一个 DAO 对象,我将其定义为案例类。
case class StudentDAO(id: Int) {
def getGPA: Double = // Expensive database lookup goes here
def getRank: Int = // Another expensive database operation and computation goes here
def getScoreCard: File = // Expensive file lookup goes here
}
我自然会创建 getGPA 和 getRank 和 getScoreCard defs 而不是 vals,因为我不希望在使用它们之前计算它们。
如果我将这些方法标记为lazy vals 而不是defs,会对性能产生什么影响?我想让他们成为lazy vals 的原因是:我不想每次都为 id 为“i”的学生重新计算排名。
我希望这不会被标记为重复,因为下面有几个问题主要是关于差异的:
When to use val, def, and lazy val in Scala?
def or val or lazy val for grammar rules?
`def` vs `val` vs `lazy val` evaluation in Scala
这个问题主要针对成本(CPU 与内存之间的权衡)在为昂贵的操作创建 method 和 lazy val 时,有什么建议而不是其他建议以及为什么?
编辑:感谢您的评论@om-nom-nom。我应该更清楚我在寻找什么。
我在这里读到:
Use of lazy val for caching string representation
对象的字符串表示被缓存(见@Dave Griffith's answer)。更准确地说,如果我将垃圾收集设置为 lazy val 而不是 def,我正在研究垃圾收集的影响
【问题讨论】:
-
您希望听到什么? lazy val 会多消耗 10 个字节和 200 个 CPU 周期?
-
@om-nom-nom:不完全是。请看我的编辑:)
标签: scala lazy-evaluation function