В этой ситуации (неизменяемые комплексные числа) case-классы - это именно то, что вы хотели бы использовать.Если вы хотите инициализировать другое поле в конструкторе, вы должны сделать это следующим образом:
case class Complex(real: Double, imaginary: Double) {
val foo = "bar"
}
Теперь все действительные, мнимые и foo являются полями public в Complex.
РЕДАКТИРОВАТЬ ниже -
Используя обычный класс, вы можете сделать параметры конструктора открытыми полями, такими как:
class Complex(val real: Double, val imaginary: Double)
class MutableComplex(var real: Double, var imaginary: Double)
Вот кое-что интересное, чего я не знал:
class Complex(real: Double, imaginary: Double) {
println(real + " + " + imaginary + "i")
}
% javap -private Complex
public class Complex extends java.lang.Object implements scala.ScalaObject{
public Complex(double, double);
}
real
и imaginary
не входят в класс.
Но если вы используете параметры конструктора за пределами конструктора, они добавляются как частные значения:
class Complex(real: Double, imaginary: Double) {
override def toString = real + " + " + imaginary + "i"
}
% javap -private Complex
public class Complex extends java.lang.Object implements scala.ScalaObject{
private final double real;
private final double imaginary;
public java.lang.String toString();
public Complex(double, double);
}