1. 程式人生 > 實用技巧 >scala之旅-核心語言特性【多型方法】(二十九)

scala之旅-核心語言特性【多型方法】(二十九)

在Scala中,方法可以和值一樣可以被型別引數化。這樣寫的語法跟泛型很像。型別引數用中括號包著,值引數則是用小括號包著。

下面就是例子:

def listOfDuplicates[A](x: A, length: Int): List[A] = {
  if (length < 1)
    Nil
  else
    x :: listOfDuplicates(x, length - 1)
}
println(listOfDuplicates[Int](3, 4))  // List(3, 3, 3, 3)
println(listOfDuplicates("La", 8))  // List(La, La, La, La, La, La, La, La)

該方法listOfDuplicates採用型別引數A和值引數x以及lengthx是型別A如果length < 1我們返回一個空列表。否則,我們x將放在遞迴呼叫返回的重複項列表的前面(請注意,這::意味著將左側的元素新增到右側的列表之前。)

在第一個示例呼叫中,我們通過編寫顯式提供了type引數[Int]因此,第一個引數必須為Int,返回型別為List[Int]

第二個示例呼叫顯示您不必總是顯式提供type引數。編譯器通常可以根據上下文或值引數的型別進行推斷。在此示例中,"La"是,String因此編譯器知道A必須是String