函數和閉包之函數字面量的短格式

Scala提供了許多方法去除冗餘信息並把函數字面量寫得更簡短。注意留意這些東西,由於它們能讓你去掉代碼裏亂七八糟的東西。一種讓函數字面量更簡短的方式是去除參數類型。所以,前一節帶過濾器的例子能夠寫成這樣:函數

object Test1 {
    def main(args:Array[String]):Unit = {
        val someNumbers= List(-11,-10,-5,0,5,10)
        someNumbers.filter((x) => x > 0).foreach((x) => println(x))
    }
}

Scala編譯器知道x必定是整數,由於它看到你使用了這個函數過濾整數列表(由someNmbers暗示)。這被稱爲目標類型化:target typing,由於表達式的目標使用(本例中目標就是someNumbers中的元素,它會做爲參數傳入)影響了表達式的類型化(x的類型)。目標類型化的精確細節並不重要。你能夠簡單地從編寫一個不帶參數類型的函數字面量開始,而且,若是編譯不能識別,再加上類型。幾回以後你就對什麼狀況下編譯器能解開謎題有感受了。
由於某些參數的類型是被推斷的,因此能夠不用定義入參的類型,甚至外面的小括號不用寫,儘量的減小字符的輸入(注:若是參數類型不能被推斷,參數類型與小括號都是必需要的)。如例:spa

object Test1 {
    def main(args:Array[String]):Unit = {
        val someNumbers = List(-11,-10,-5,0,5,10)
        someNumbers.filter(x => x > 0).foreach(x => println(x))
    }
}

結果:scala

相關文章
相關標籤/搜索