Мой код scala не получает TCO, хотя он проходит @tailrec

Я изучаю scala TCO и написал следующий код

import scala.annotation.tailrec
final def tailReccursionEx(str:String):List[String]={

  @tailrec 
  def doTailRecursionEx(str:String,pos:Int,accu:List[String]):List[String]={
    if(pos==str.length) return accu
    else{
      doTailRecursionEx(str,pos+1,accu++accu.foldLeft(List[String](str(`pos`).toString)){
                                            (l,ch)=>l:+ch+str(`pos`)})
  }
}

  doTailRecursionEx(str,0,List[String]())
}

Я прошел тест @tailrec и считаю, что мой функция является саморекурсивным хвостовым вызовом. Однако, когда я смотрю на байт-код java с

javap -c -private RecursionEx\$\$anonfun\$doTailRecursionEx\$1\$1

, я не вижу обещанного goto для TCO для саморекурсивной функции. Вот байт-код.

public RecursionEx$$anonfun$doTailRecursionEx$1$1(java.lang.String, int);
  Code:
   0:   aload_0
   1:   aload_1
   2:   putfield    #35; //Field str$2:Ljava/lang/String;
   5:   aload_0
   6:   iload_2
   7:   putfield    #41; //Field pos$1:I
   10:  aload_0
   11:  invokespecial   #93; //Method scala/runtime/AbstractFunction2."<init>":()V
   14:  return

}
5
задан Win Myo Htet 21 November 2011 в 21:56
поделиться