【问题标题】:Scala Recursive Function with patterns具有模式的 Scala 递归函数
【发布时间】:2015-07-03 23:14:03
【问题描述】:

当创建一个与 Pattern 匹配的递归函数时,会引发以下错误,但当使用方法创建时,它可以正常工作。你能帮我理解吗?

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

【问题讨论】:

  • 当我尝试通过 Eclipse Scala Worksheet 运行它时出现错误,但相同的代码在 scala REPL 上运行良好。谢谢 jwvh
  • 我已经在 IntelliJ IDEA 14 和 15EAP 的 Scala 工作表上对其进行了测试。它有效,所以我猜这只是 Eclipse Scala 工作表问题。

标签: scala


【解决方案1】:

尝试将lazy 添加到val 的前面,以便设置而不是执行表达式。那么调用它执行的时候,就已经被设置好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多