unapplycomplex.scala

来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 38 行

SCALA
38
字号
trait Complex extends Product2[double,double]class ComplexRect(val _1:double, val _2:double) extends Complex {  override def toString = "ComplexRect("+_1+","+_2+")"}class ComplexPolar(val _1:double, val _2:double) extends Complex {  override def toString = "ComplexPolar("+_1+","+_2+")"}object ComplexRect {  def unapply(z:Complex): Option[Complex] = {    if(z.isInstanceOf[ComplexRect]) Some(z) else z match {      case ComplexPolar(mod, arg) =>	Some(new ComplexRect(mod*Math.cos(arg), mod*Math.sin(arg)))} } }object ComplexPolar {  def unapply(z:Complex): Option[Complex] = {    if(z.isInstanceOf[ComplexPolar]) Some(z) else z match {      case ComplexRect(re,im) =>	Some(new ComplexPolar(Math.sqrt(re*re + im*im), Math.atan(re/im)))} } }object Test {  def main(args:Array[String]) = {    new ComplexRect(1,1) match {      case ComplexPolar(mod,arg) => // z @ ???	Console.println("mod"+mod+"arg"+arg)    }    val Komplex = ComplexRect    new ComplexPolar(Math.sqrt(2),Math.Pi / 4.0) match {      case Komplex(re,im) => // z @ ???	Console.println("re"+re+" im"+im)    }  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?