Scala,虚数(数字)的简单表示法

vic*_*aba 1 scala numbers notation

想象一下,我在 Scala 中有类 Imaginary(x) 和类 Real(y)。有没有办法做 ComplexNumber = 3 + 2i 而不是做 ComplexNumber = Real(3) + Imaginary(2) ?

谢谢。

sen*_*nia 5

是否3 + 2.i足够?

sealed trait ComplexNumber {
  val re: Int
  val im: Int
}

case class Real(re: Int) extends ComplexNumber { val im: Int = 0 }
implicit class ToReal(val re: Int) extends AnyVal {
  def +(that: Imaginary) = Mixed(re, that.im)
}

case class Imaginary(im: Int) extends ComplexNumber { val re: Int = 0 }
implicit class ToImaginary(val im: Int) extends AnyVal {
  def i: Imaginary = Imaginary(im)
}

case class Mixed(re: Int, im: Int) extends ComplexNumber
Run Code Online (Sandbox Code Playgroud)

用法:

scala> 3 + 2.i
res3: Mixed = Mixed(3,2)
Run Code Online (Sandbox Code Playgroud)