El siguiente código está tomado de la Programación en Scala book de Martin Odersky et al. que define un tipo racional:¿Es posible definir una variable de constructor local en 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)
}
Aquí el valor g sólo se utiliza cuando el constructor implícito inicializa campos numer y denom. Supongamos que el programador sabe que no se usará en ningún otro lado. En el caso anterior, sigue siendo accesible después de la construcción del objeto Rational. Lo que significa que también ocupará espacio ya que es un campo privado en lugar de ser una variable local para el constructor.
Mi pregunta es ¿cómo puedo cambiar este código para que g
solo se use durante la construcción y luego se deseche?
Este es uno de esos "puntos icky" en Scala. Imagínese que si el objeto constructor dado solo se usara para extraer alguna información arbitraria: tenerlo por siempre evitaría que sea elegible para la recuperación, incluso si solo se necesita un pequeño subconjunto de información. Creo que hay una sintaxis de "cuerpo pre-clase", pero no recuerdo qué es. –
@pst Gracias por esta rápida edición lo estaba haciendo mientras tanto. La tuya se ve mejor sin embargo. :) – ciuncan
Si alguien tiene algún vínculo con respecto a esta sintaxis de "cuerpo pre-clase" que pst menciona, me interesaría saber al respecto. –