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