Ich habe eine Funktion definiert, die den Fibonacci-Stream wie folgt zurückgibt:
%Vor%Die Funktionen funktionieren in Ordnung, aber es sieht ineffizient aus (siehe die Ausgabe unten)
%Vor%Es sieht also so aus, als ob die Funktion von Anfang an die n-te Fibonacci-Zahl berechnet. Ist es richtig? Wie würdest du es reparieren?
Das liegt daran, dass Sie def
verwendet haben. Verwenden Sie ein val
:
Grundsätzlich ist def
eine Methode; In Ihrem Beispiel rufen Sie die Methode jedes Mal auf und jedes Mal, wenn der Methodenaufruf einen neuen Stream erstellt. Die Unterscheidung zwischen def
und val
wurde bereits vor SO behandelt, daher werde ich hier nicht näher darauf eingehen . Wenn Sie von einem Java-Hintergrund sind, sollte es ziemlich klar sein.
Das ist eine andere nette Sache über Scala; In Java können Methoden rekursiv sein, aber Typen und Werte sind möglicherweise nicht rekursiv. In scala können sowohl Werte als auch Typen rekursiv sein.