Ven*_*ama 2 scala function lazy-evaluation
我有一个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
}
Run Code Online (Sandbox Code Playgroud)
我自然会制作getGPA和getRank而getScoreCard def不是vals因为我不希望它们在被使用之前被计算出来.
如果我将这些方法标记为lazy vals而不是defs,会对性能产生什么影响?我想让它们成为lazy vals 的原因是:我不想每次为id为"i"的学生重新计算等级.
我希望这不会被标记为重复,因为有几个问题如下,主要是差异:
Scala中的`def` vs`val` vs`lazy val`评估
这个问题主要是针对朝费用(CPU与内存之间的权衡)在作出method一个lazy val昂贵的操作,什么会建议一个比其他?为什么?
编辑:感谢您对@ om-nom-nom的评论.我应该更清楚我正在寻找什么.
我在这里读到:
缓存对象的字符串表示(请参阅@Dave Griffith的回答).更确切地说,我正在研究垃圾收集的影响,如果我做了它lazy val而不是def
对我来说似乎很简单:
我不希望它们在被使用之前被计算出来.[...]我不想每次为id为"i"的学生重新计算排名.
然后使用lazy val就是这样.
def当每个调用的值可能发生变化时使用,通常是因为传递参数,val不会改变,但会立即计算.
| 归档时间: |
|
| 查看次数: |
3743 次 |
| 最近记录: |