Scala中val, lazy, def的区别

val strVal = scala.io.Source.fromFile("test.txt").mkString 
//在strVal被定义的时候获取值,如果test.txt不存在,直接报异常
 
lazy val strLazy = scala.io.Source.fromFile("test.txt").mkString 
//在strLazy第一次被使用的时候取值,如果test.txt不存在,不使用strLazy是不会报异常的,第一次访问strLazy的时候报异常 
 
def strDef = scala.io.Source.fromFile("test.txt").mkString //每次使用的时候都重新取值

如果一开始test.txt内容是"a",定义好之后,将test.txt内容改为"ab",则strVal == "a", strLazy == "ab",strDef == "ab"。再将test.txt内容改为"abc",则strVal == "a", strLazy == "ab",strDef == "abc"。再修改test.txt的内容,strVal和strLazy都不会改变,而strDef每次都更新。

你可能感兴趣的:(Scala中val, lazy, def的区别)