显然,当存在参数时,如果值取决于可变对象,或者值取决于特征成员,则必须使用def。如果表达式可能抛出异常,则无法使用val。但如果情况不是这样呢?更具体地说,是否有理由在这种情况下使用def?是否最好使用val(当表达式不会抛出异常时)和lazy val(当表达式抛出异常时)?
例如:
class FifthElement(seq: Seq[Element]) {
def hasFifthElement = seq.length > 5 // is it better to use val than def?
def fifthElement = seq(5) // is it better to use lazy val than def?
}