快学Scala6-操作符

参考文献:《快学Scala》第十一章

Tips:有点变成经验的人,通过本系列博客可以更快速的掌握Scala编程基础

package learn
import scala.collection.mutable.HashMap
/**
  * Created by wjf on 2016/8/14.
  */
/*本章我们学习Scala 操作符*/
object TestOperation {
  def main(args: Array[String]): Unit = {
    /*特别声明:注意下面的地方是不一样的
    * 《快学Scala》中说 b toString 等同于b.toString ,显然这个说法是错的,下面就是很好的例子*/
    var a=1
    var b=2
    println(a + b toString) // 3
    println(a + b.toString) //12


    val author="wjf hello"
    author match {
      case Name(first,last) => println(first+"-"+last)
      case Name(first,middle,last) =>println(first+"-"+middle+"-"+last)
      case _ => println("none")
    }
  }
  /*理论上任何Unicode 都可以成为合法的表示符,初次之外你也可是使用任意序列的操作符字符:
  * 比如 !#+- 等等
  * 你可以在反引号中包含几乎任何字符序列,例如*/
  def test: Unit ={
    val `val` =42
  }
  // 上面的的实例很糟糕,但是反引号有时确实可以成为“逃生舱门“,比如yield 你可能要访问java 中一个同样命名的方法
  // 反引号来拯救你
  // Thread.`yield`()
  /*自定义操作符比如定义 * (n1/d1) *(n2/d2) =(n1*n2 /d1*d2)*/
  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)
  }
  /* apply和 update
  * 如果f 不是函数或方法,那么如下表达式就等同于调用
  * f(arg1,arg2...) f.apply(arg1,arg2,...)
  * f(arg1,arg2,...)=value f.update(arg1,arg3,...,value)*/
  val scores=new HashMap[String,Int]
  scores("bob")=100 // 调用 scores.update
  val bobsScore =scores("bob") // 调用scores.apply("bob")

  /*unapply 提取器,提取值*/
  case class CC(value:Double,unit:String)
//  var v=new CC(1,"RMB")
//  case CC(1,"RMB") => println("RMB"+1)
  /*unapplySeq 方法*/
  object Name{
    def unapplySeq(input :String):Option[Seq[String]] =
      if(input.trim== "") None else Some(input.trim.split("\\s+"))
  }

}



你可能感兴趣的:(快学Scala6-操作符)