Scala递归函数与模式

时间:2015-07-03 23:14:04

标签: scala

当创建一个带有递归的函数时,模式匹配会引发下面的错误,但是当用方法创建时它可以正常工作。能帮助我理解吗。

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)
    }
}

1 个答案:

答案 0 :(得分:2)

尝试将lazy添加到val的前面,以便设置表达式而不是执行表达式。然后当它通过调用它执行时,它已经被设置。