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)
}