1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
import scala.annotation.tailrec
class TailRec {
def bar(f: => Any) = ""
// transform the qualifier of a Select
bar {
@tailrec def inner(i: Int): Int = 1 + inner(i)
inner(0)
}.length
// transform the body of a function
() => {
@tailrec def inner(i: Int): Int = 1 + inner(i)
inner(0)
}
// transform the qualifier of a Select
{
@tailrec def inner(i: Int): Int = 1 + inner(i)
inner(0)
""
}.length
// The receiver of a tail recursive call must itself be transformed
object X {
@tailrec // okay, all other annotated methods should fail.
def foo: Any = {
{
@tailrec def inner(i: Int): Int = 1 + inner(i)
inner(0)
this
}.foo
}
}
Some(new AnyRef) map { phooie =>
@tailrec
def inner(i: Int): Int = 1 + inner(i)
} getOrElse 42
}
|