2013-09-21 8 views
6

Jestem nowy w scala i obecnie ćwiczę w arkuszu roboczym. zauważyłem, że @tailrec nie działa w arkuszu chociaż dodany import@ cocktail błąd w arkuszu zaćmień scala: oczekiwany początek definicji

import scala.annotation.tailrec 

To jest wersja scala używam

Scala code runner version 2.10.2 -- Copyright 2002-2013, LAMP/EPFL 

Czy istnieje sposób, aby ją pracować? Dzięki

+0

Bez zobaczenia kodu, który jest produkujących błąd, to jest niemożliwe, aby określić, co jest źle. – reggert

Odpowiedz

9

Kwestia opisałeś to błąd w Eclipse IDE dla Scala: https://scala-ide-portfolio.assembla.com/spaces/scala-ide/tickets/1001636#/activity/ticket

Rozwiązaniem jest umieszczenie @tailrec w def lub innego obiektu.

np

package tailrecfunc 

import scala.annotation.tailrec 

object Session17 { 
    val block = { 
    @tailrec 
    def tailrecfunc(n: Int): Int = 
    if(n == 0) n; else tailrecfunc(n - 1) 

    tailrecfunc(4) 
    }           
} 

ten sposób interpreter scala ostrzeże Cię, gdy funkcja nie jest ogon rekurencyjnej

1

Najpierw zdefiniuj i podpnij funkcję, którą chcesz opisać, a następnie wróć i dodaj adnotację.

4

Należy pamiętać, że nie mylisz się, jak działa adnotacja @tailrec - nie wymusza to optymalizacji funkcji przez kompilator w "rekurencyjny sposób" (kompilator i tak to zrobi, jeśli to możliwe).

Jest to po prostu znacznik, którego można użyć do poinformowania kompilatora: "Myślę, że funkcja została pomyślnie napisana w sposób rekursywny, powiedz proszę, jeśli nie możesz zoptymalizować tego w ten sposób".

Oznacza to, że używaj go tam, gdzie chcesz mieć pewność, że poprawnie napisałeś funkcję, która ma być unikalna dla ogona, a kompilator może wskazać, kiedy źle zrobisz.

Czy to ma sens z tego, co widzisz? Nie mogę powiedzieć nic bardziej użytecznego bez obejrzenia przykładowego kodu, w którym używałeś adnotacji.

Powiązane problemy