Scala 中的方法可以按类型和值进行参数化。 语法和泛型类类似。 类型参数括在方括号中,而值参数括在圆括号中。

    看下面的例子:

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

    方法 listOfDuplicates 具有类型参数 A 和值参数 xlength。 值 xA 类型。 如果 length < 1,我们返回一个空列表。 否则我们将 x 添加到递归调用返回的重复列表中。 (注意,:: 表示将左侧的元素添加到右侧的列表中。)

    上例中第一次调用方法时,我们显式地提供了类型参数 [Int]。 因此第一个参数必须是 Int 类型,并且返回类型为 List[Int]

    上例中第二次调用方法,表明并不总是需要显式提供类型参数。 编译器通常可以根据上下文或值参数的类型来推断。 在这个例子中,"La" 是一个 String,因此编译器知道 A 必须是 String