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 + -
显示快捷键?