scala中self type 與 依賴注入

2021-09-05 01:21:51 字數 1212 閱讀 3116

/**

* * self =>

* self 並非關鍵字,你可以用任意其他字元替代

* self只是給this 關鍵字起了乙個別名

* @author yyyyy

* @version 1.0

* **/

/**

* 在內部類中的應用

*///當前物件 this的別名

self =>

val name = "世界"

//此處的this 和self 都是當前物件:世界

println(this.name)

println(self.name)

println("-------------------")

//內部類

class china

new china

}

世界

世界-------------------

中國世界

process finished with exit code 0

/**

* 依賴注入

*///生命起源

trait water

//有了水才有動物,動物會移動

trait animal2 extends water

//有了水源也可以有植物,植物會生根,發芽

trait botany extends water

//人類也是動物的一種

trait human

object diqiu 

println(zhangsan.name)

zhangsan.move("直立")

println("----------------------")

/*** 混入botany,那麼李四也就不是個人了

*/val lisi = new human with botany

println(lisi.name)

lisi.grow("直立")

}}

執行結果:

張三直立著移動

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

李四直立發芽了

process finished with exit code 0

Scala中規約操作reduce與fold函式

規約操作是對容器的元素進行兩兩運算,將其 規約 為乙個值。常用的規約方法有reduce和fold,兩個方法唯一的差別是,reduce是從容器的兩個元素開始規約,而fold則是從提供的初始值開始規約。同樣地,對於無序容器而言,fold方法不保證規約時的遍歷順序,如要保證順序,請使用foldleft和f...

簡談scala 中的val 與 var

斷斷續續學習scala也有一段時間了,初期總對val 與var 的理解不太透徹,今天來做做總結。一般都知道val 表示不可變,var表示可變,比如 val s hello s world 錯誤,不能對val重新賦值 var i 1 i 2 沒有問題 但是在碰到可變與不可變資料結構的時候,容易造成迷惑...

scala快速上手 三 Scala 方法與函式

def fun a int b int unit fun 1,1 def fun1 a int b int a b println fun1 1,2 注意點 遞迴方法 5 的階乘 def fun2 num int int print fun2 5 包含預設引數值的函式 注意 1.預設值的函式中,如果...