2013-08-25 45 views
0

當運行這段代碼:錯誤:@tailrec註釋的方法不包含遞歸調用

object P01 { 
    @annotation.tailrec 
    final def lastRecursive[A] (ls:List[A]):A = { 
     def lr[A] (l:List[A]):A = l match { 
      case h :: Nil => h 
      case _ :: tail => lr(tail) 
      case _   => throw new NoSuchElementException 
     } 
     lr(ls) 
    } 
} 

P01.lastRecursive(List(1,2,3)) 

,在斯卡拉2.10.2 REPL,我得到以下錯誤:

斯卡拉>:9:錯誤:@tailrec註解的方法不包含遞歸調用

final def lastRecursive[A] (ls:List[A]):A = { 
      ^

請幫助,我不明白我在做什麼錯。

+0

它看起來像你打算把註釋放在'lr'而不是'lastRecursive'? – Lee

回答

4

lastRecursive不是尾遞歸,而是lr。這對我有效:

object P01 { 
    final def lastRecursive[A] (ls:List[A]):A = { 
     @annotation.tailrec 
     def lr[A] (l:List[A]):A = l match { 
      case h :: Nil => h 
      case _ :: tail => lr(tail) 
      case _   => throw new NoSuchElementException 
     } 
     lr(ls) 
    } 
} 
+0

謝謝。當我將註釋移動到lr時它工作正常! – alexs

相關問題