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

原文地址:https://www.cnblogs.com/zhouwenyang/p/14072236.html