Em uma função recursiva, geralmente é eficaz levar o resultado passo a passo, para otimizar a chamada final. Para sinalizar ao usuário que ele não precisa fornecer um parâmetro, pode ser razoável nomear um parâmetro como "resultado":
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)
}
Mas, mais frequentemente, uso 'carry' e 'sofar', que já vi na natureza, e que carregam a idéia ainda um pouco melhor, na maioria dos casos.
Um segundo motivo é claro, se o tópico sugerir a palavra '' resultado '', por exemplo, se você fizer uma avaliação aritmética. Você pode analisar a fórmula, substituir variáveis por valores e calcular um resultado no final.
Um terceiro motivo já foi afirmado, mas eu tenho um pequeno desvio: você escreve um método que realiza algum trabalho, digamos que ele avalie uma forma de '' max ''.
def max = {
val result = somethingElseToDo
if (foo) result else default
}
Em vez de chamar o resultado '' resultado '', poderíamos chamá-lo de '' max '', mas em alguns idiomas você pode omitir parênteses ao chamar um método, portanto max seria uma chamada recursiva para o próprio método.
Em geral, eu preferiria um nome que diga qual é o resultado. Mas se esse nome já estiver sendo usado, talvez por mais de uma variável, atributo ou método, porque existe um campo da GUI, uma representação de string, um numérico e um para o banco de dados, o uso de outro aumenta a probabilidade de confusão. Em métodos curtos de 3 a 7 linhas, '' resultado '' não deve ser um problema para um nome.
ofTheJedi
usado para esse fim. Não é uma recomendação, apenas dizendo que eu já vi.Zorglub ofTheJedi = //...; return ofTheJedi;