如果没有参数,可以定义没有paranthesis的方法。一个特殊的用例是使用它来获取值。我应该这样做,还是直接获得价值?
所以
class Complex(real: Double, imaginary: Double) {
def re = real
def im = imaginary
override def toString() =
"" + re + (if (im < 0) "" else "+") + im + "i"
}
或
class Complex(real: Double, imaginary: Double) {
val re = real
val im = imaginary
override def toString() =
"" + re + (if (im < 0) "" else "+") + im + "i"
}
答案 0 :(得分:2)
您可以将val
放在构造函数参数前面,使其更短一些,这与您的第二段代码实际上相同:
class Complex(val re: Double, val im: Double) {
override def toString() = "" + re + (if (im < 0) "" else "+") + im + "i"
}
请注意,def
定义方法,而val
定义最终成员变量。由于这两种方法的返回值是固定的,因此没有理由使它们成为方法。因此,在这种情况下,请使用val
代替def
。
答案 1 :(得分:1)
更好:将其设为案例类:
case class Complex(re: Double, im: Double) {
override def toString() = "%f%+fi".format(re,im)
}
这会为您提供re
和im
成员,以及一些额外的优惠,例如copy
:
val a = Complex(1,2)
val realA = a.copy(im = 0)
和unapply
:
def isImaginary(a: Complex) = a match {
case Complex(0, _) => true
case _ => false
}
def abs(a: Complex) = a match {
case Complex(re, im) => re*re + im*im
}
以及equals
,hashCode
等