scala学习笔记(8)

1.trait

-------------------------------

 如果只有一个trait就使用extends进行扩展,如果是多个,就使用with对生于trait进行扩展

 trait logger1{

    def log()= println("hello log1");
  }
trait logger2{

    def log()= println("hello log2");
  }
  class Dog with logger{      }

 

//trait之间也存在扩展

  trait logger2 extens logger1{}

//with trait 是需要对每个trait都使用trait

自身类型

----------------------------------------------

  this:类型=>

操作符

---------------------------------

  1.中置操作符

    a 标识符 b    //标识符代表一个有两个参数的方法(一个隐式的参数和一个显示的参数)

    如:1 + 2<===> 1.+(2)    //这样的表达式叫做中置(infix)表达式,因为操作符位于两个参数之间

  2.单元操作符

  scala> 1 toString  //单元操作符

  scala> +: -:  !:boolean取反    ~:按位取反       //

  赋值操作符

  $scala>+=  /  -=  *=   /=

  结合性:

    当有一些列的相同优先级的操作符的时候,操作符的结合性决定了其实从左到右求值还是从右到左求值

    scala中所有的操作符都是左结合的,除了:(1)以冒号:结尾的操作符;(2)赋值操作符;(3)Nil:空集合

    在Nil结合中追加元素:1::Nil    //List[Int]=List(1)    1::2::Nil    //List[Int] = List(1,2)

    运算顺序:val list=2::Nil    1::list    //返回值:List[Int] = List(1,2)

    //:表示右结合,优先级从右边开始

    scala>val l = Nil      //构造空集合

    scala>1::2::Nil      //

3.apply和update方法

---------------------------------------------------------

  Array(100)    //Array.apply(100);

  Array(100) = 200  //Array.update(200)  进行更新操作

  unapply(),是apply的逆向过程

 

  object Dog{

    //

    def apply(str):Int = {str.Int+100}

    def unapply(i:Int) = {(i-100).toString}

  }

upapply(),是apply()的逆向过程

------------------------------------------------

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

  }

  object Fraction{

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

  }

posted @ 2018-09-21 08:33  stone1234567890  阅读(110)  评论(0编辑  收藏  举报