Il seguente codice è tratto da Programming in Scala di Martin Odersky et al. che definisce un tipo razionale:È possibile definire una variabile locale del costruttore in Scala?
class Rational(n: Int, d: Int) {
require(d != 0)
private val g = gcd(n.abs, d.abs)
val numer = n/g
val denom = d/g
...
private def gcd(a: Int, b: Int): Int = if (b == 0) a else gcd(b, a % b)
}
Qui il valore g viene utilizzato solo quando il costruttore implicito inizializza campi numer e denom. Supponiamo che il programmatore sappia che non sarà usato altrove. Nel caso precedente è ancora accessibile dopo la costruzione dell'oggetto Rational. Il che significa che occuperà anche spazio poiché è un campo privato anziché essere una variabile locale per il costruttore.
La mia domanda è come faccio a cambiare il codice affinché g
viene utilizzato solo mentre la costruzione e poi gettato via?
Questo è uno di quei "punti icky" in Scala. Immagina che se il dato oggetto costruttore fosse usato solo per estrarre alcune informazioni arbitrarie: averlo in giro per sempre avrebbe impedito di essere idoneo per la bonifica anche se fosse richiesto solo un piccolo sottoinsieme di informazioni. Penso che ci sia una sintassi del "corpo pre-classe", ma non riesco a ricordare quale sia. –
@ pst Grazie per questa rapida modifica stavo facendo così nel frattempo. Il tuo aspetto è migliore. :) – ciuncan
Se qualcuno ha dei collegamenti relativi a questa sintassi del "corpo pre-classe" che citato, sarei interessato a sentirlo. –