2015-07-03 93 views
1

當在模式匹配上創建帶遞歸的函數時,它會拋出下面的錯誤,但是當使用方法創建它時,它工作正常。你能幫我理解嗎?具有模式的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) 
    } 
} 
+0

我得到了錯誤,當我試圖通過Eclipse Scala Worksheet運行它時,但相同的代碼在scala REPL上正常工作。感謝jwvh –

+0

我已經在IntelliJ IDEA 14和15EAP上的Scala工作表上測試過它。它的工作原理,我想這只是Eclipse Scala工作表問題。 –

回答

2

嘗試順序添加lazyval正面的表達設置,而不是執行。然後,通過調用它來執行它時,它已經被設置。