Scala之旅-多态方法
多态方法(Polymorphic Methods)
Scala中的方法可以通过类型参数化,通过值(value)同样可以。语法和泛型类是类似的。类型参数在一对方括号中声明,而值参数是放在一对圆括号中。
下面是一个例子:
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和length。在这个例子中,值x的类型是A。如果length < 1
则返回一个空列表。否则就将x放在递归调用listOfDuplicates返回的列表前面。(注:操作符::的意思是将一个元素放在一个序列的前面)。
当我们用[Int]作为类型参数调用listOfDuplicates时,第一个参数必须是一个int,并且返回类型是List[Int]。然而,你并不总是需要显示地提供这个类型参数,因为编译器经常能够通过值参数的类型推断出来(”La”是一个String)。事实上,如果从Java调用这个方法是不可能提供这个类型参数的。
参考资料
本文译自Tour Of Scala – Polymorphic Methods
上一篇:Scala之旅-隐式转换
下一篇:Scala入门-本地类型推断(Local Type Inference)