快学Scala(11)--操作符

f(arg1, arg2, ...)        //f.apply(arg1, arg2, ...)
f(arg1, arg2, ...) = value   //f.update(arg1, arg2, ..., value)

  

object Fraction {

  def apply(n: Int, d: Int) = new Fraction(n, d)

  def unapply(input: Fraction): Option[(Int, Int)] =
    if(input.den == 0) None else Some((input.num, input.den))

  def main(args: Array[String]): Unit = {
    var Fraction(n,d) = Fraction(3, 4) * Fraction(2, 5)
  }

}

class Fraction(n: Int, d: Int) {

  private val num = n
  private val den = d

  def*(other: Fraction) = new Fraction(num*other.num, den*other.den)


}

  此时d=6,n=20

unapplySeq方法

object Name {

  def unapplySeq(input: String) : Option[Seq[String]] =
    if(input.trim == "") None else Some(input.trim.split("\s+"))

  def main(args: Array[String]): Unit = {
    var Name(first, "van", last) = "A van B"
    printf("%s, %s", first, last)
  }
}

  此时first=A, last=B

  

原文地址:https://www.cnblogs.com/PaulingZhou/p/6661545.html