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,def,lazy,val)