Scala的Infix Type與Self Types

541732025發表於2016-01-28
Infix Type:中值型別,允許帶有兩個引數的型別

點選(此處)摺疊或開啟

  1. object Infix_Types {

  2.   def main(args: Array[String]) {
  3.     
  4.     object Log { def >>:(data:String):Log.type = { println(data); Log } }
  5.     "Hadoop" >>: "Spark" >>: Log //右結合,先列印出Spark,再列印出Hadoop
  6.     
  7.      val list = List()
  8.      val newList = "A" :: "B" :: list //中值表示式
  9.      println(newList)
  10.     
  11.     class Infix_Type[A,B] //中值型別是帶有兩個型別引數的型別
  12.     val infix: Int Infix_Type String = null //此時A是Int,B為String,具體型別名寫在兩個型別中間
  13.     val infix1: Infix_Type[Int, String] = null //和這種方式等價
  14.     
  15.     case class Cons(first:String,second:String) //中值型別
  16.     val case_class = Cons("one", "two")
  17.     case_class match { case "one" Cons "two" => println("Spark!!!") } //unapply
  18.     
  19.   }

  20. }
self-type

點選(此處)摺疊或開啟

  1. class Self {
  2.     self => //self是this別名
  3.     val tmp="Scala"
  4.     def foo = self.tmp + this.tmp
  5. }
  6. trait S1
  7. class S2 { this:S1 => } //限定:例項化S2時,必須混入S1型別
  8. class S3 extends S2 with S1
  9. class s4 {this:{def init():Unit} =>} //也能用於結構型別限定

  10. trait T { this:S1 => } //也能用於trait
  11. object S4 extends T with S1
  12. object Self_Types {

  13.   def main(args: Array[String]) {
  14.     class Outer { outer =>
  15.      val v1 = "Spark"
  16.      class Inner {
  17.      println(outer.v1)  //使用外部類的屬性
  18.      }
  19.     }
  20.     val c = new S2 with S1 //例項化S2時必須混入S1型別
  21.   }

  22. }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1983648/,如需轉載,請註明出處,否則將追究法律責任。

相關文章