In einer rekursiven Funktion ist es häufig effektiv, das Ergebnis von Schritt zu Schritt zu übertragen, um eine Optimierung des Tail-Calls zu erreichen. Um dem Benutzer zu signalisieren, dass er keinen Parameter angeben muss, kann es sinnvoll sein, einen Parameter "result" zu nennen:
def removeOccurence [A] (slice: Seq[A], original: Seq[A]) = {
@scala.annotation.tailrec
def remove (leftOriginal: Seq[A], result: Seq[A]) : Seq[A] =
trimStart (slice, leftOriginal) match {
case (h :: tail) => remove (tail, h +: result)
case (Nil) => result.reverse
}
remove (original, Nil)
}
Aber häufiger verwende ich "Carry" und "Sofar", die ich in der Natur gesehen habe und die die Idee in den meisten Fällen sogar ein bisschen besser tragen.
Ein zweiter Grund ist natürlich, wenn Ihr Thema das Wort '' result '' vorschlägt, zum Beispiel, wenn Sie eine arithmetische Auswertung durchführen. Sie können die Formel analysieren, Variablen durch Werte ersetzen und am Ende ein Ergebnis berechnen.
Ein dritter Grund wurde bereits genannt, aber ich habe eine kleine Abweichung: Sie schreiben eine Methode, die einen Job ausführt, sagen wir, sie bewertet eine Form von '' max ''.
def max = {
val result = somethingElseToDo
if (foo) result else default
}
Anstatt das Ergebnis '' result '' aufzurufen, könnten wir es '' max '' nennen, aber in einigen Sprachen können Sie beim Aufrufen einer Methode Klammern weglassen, sodass max ein rekursiver Aufruf der Methode selbst wäre.
Im Allgemeinen würde ich einen Namen vorziehen, der sagt, was das Ergebnis ist. Wenn dieser Name jedoch bereits vergeben ist, möglicherweise von mehr als einer Variablen, einem Attribut oder einer Methode, da es ein GUI-Feld, eine Zeichenfolgendarstellung, eine numerische und eine für die Datenbank gibt und eine andere verwendet, erhöht dies die Wahrscheinlichkeit von Verwechslungen. Bei kurzen Methoden mit 3 bis 7 Zeilen sollte '' result '' für einen Namen kein Problem darstellen.
ofTheJedi
verwendet für diesen Zweck gesehen. Keine Empfehlung, nur zu sagen, dass ich es gesehen habe.Zorglub ofTheJedi = //...; return ofTheJedi;