Scala中方括号中的目的A是什么

时间:2019-01-10 17:57:23

标签: scala recursion brackets

我正在学习Scala。下面的代码多次出现[A]。请有人用外行的方式向我解释。我无法理解(尝试使用google并阅读StackOverflow和其他答案,但我不明白。下面的代码是从列表中找到第k个元素。

def findKth[A](k:Int, l:List[A]):A = k match {
    case 0 => l.head
    case k if k > 0 => findKth(k - 1, l.tail)
    case _ => throw new NoSuchElementException  
}

2 个答案:

答案 0 :(得分:4)

def findKth[A](k:Int, l:List[A]):A = k match {
    case 0 => l.head
    case k if k > 0 => findKth(k - 1, l.tail)
    case _ => throw new NoSuchElementException  
}

此处[A]是函数findKth的类型参数。现在,类型参数是什么意思? 类型参数告诉编译器方法findKth可以采用类型A的参数。这里的通用类型是a,因为它可以是任何东西。例如,A可以是Int,Double,Another List等。

有关更多信息,建议您通过以下链接:

  

https://docs.scala-lang.org/tour/polymorphic-methods.html

     

https://docs.scala-lang.org/tour/generic-classes.html

答案 1 :(得分:3)

它用于在Scala中声明通用参数,您可以使用不同类型(DoubleIntDogs ...)的列表来调用方法

如果您想了解更多,这篇文章:https://apiumhub.com/tech-blog-barcelona/scala-type-bounds/

例如:

def findKth[A](k:Int, l:List[A]):A = k match {
    case 0 => l.head
    case k if k > 0 => findKth(k - 1, l.tail)
    case _ => throw new NoSuchElementException  
}

val intList = 1 :: 2::3::4::5::6::7::8::9::10::Nil
val strList = intList.map(_.toString)
println(findKth(9, intList))
println(findKth(3, strList))

如您所见,可以将List[Int]List[String]传递给函数,这是参数化函数以接受泛型参数的一种方法。

您可以在这里看到它的工作:https://scalafiddle.io/sf/XwaALIk/0