当创建一个带有递归的函数时,模式匹配会引发下面的错误,但是当用方法创建时它可以正常工作。能帮助我理解吗。
val power: (Int, Int) => Int = (base: Int, exp: Int) => {
exp match {
case 0 => 1
case 1 => `base`
case e => `base` * power(`base`, e - 1)
}
}
上面显示的代码会产生错误:“前向引用扩展到值的定义”。但是下面的代码运行正常:
def func1(base: Int, exp: Int): Int = {
exp match {
case 0 => 1
case 1 => `base`
case e => `base` * func1(`base`, e - 1)
}
}
答案 0 :(得分:2)
尝试将lazy
添加到val
的前面,以便设置表达式而不是执行表达式。然后当它通过调用它执行时,它已经被设置。