scala 函數

object FirstScala extends App {
  var a ="";
  val array = Array(1,2,3);
  array.foreach{arg=> a+=(arg+"")}
  print(a)
  if (array.length>0) a=a.substring(0, array.length-1)
  println(a)
}

從上述代碼中能夠看出,在array.foreach方法中能夠函數做爲其參數,arg=>a+=(arg+"")是一個匿名參數。java

定義匿名函數:函數

 val cube = (x:Int)=>x*x*x
  val c = cube(3)

定義內部函數:
spa

def sum_of_square(x:Int,y:Int):Int={
    def square(x:Int):Int={
      x*x
    }
    square(x)+square(y)
  }

構造函數scala

構造函數不是特殊的方法,和java有點區別,他是除了類方法之外的代碼。
code

class Calculator(brand: String) {  /**
   * A constructor.
   */
  val color: String = if (brand == "TI") {    "blue"
  } else if (brand == "HP") {    "black"
  } else {    "white"
  }  // An instance method.
  def add(m: Int, n: Int): Int = m + n
}

從上面能夠看出Calculator構造函數定義了一個變量color,然而他直接用的是if表達式,可見表達式在scala中佔了很大比重繼承

特質:是一些字段和行爲的集合,能夠經過with字段進行擴展,和extends區別
get

trait Car {
  val brand: String
}trait Shiny {
  val shineRefraction: Int
}class BMW extends Car {
  val brand = "BMW"}

class BMW extends Car with Shiny {
  val brand = "BMW"
  val shineRefraction = 12}

特質與抽象類的區別:string

特質不接受構造函數參數,因此你想使用構造函數初始化類,那你能夠使用抽象類。trait Car(name:String)是不合法的it

若是不須要構造參數,能夠優先選用特質,由於特質能夠進行多擴展,而只能繼承一個抽象類
io

特質支持泛型:

trait Cache[K, V] {
  def get(key: K): V
  def put(key: K, value: V)
  def delete(key: K)
}

scala函數是有值的,這直接決定了scala中函數能夠做爲一個參數使用

相關文章
相關標籤/搜索