我正在学习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
}
答案 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等。
有关更多信息,建议您通过以下链接:
答案 1 :(得分:3)
它用于在Scala中声明通用参数,您可以使用不同类型(Double
,Int
,Dogs
...)的列表来调用方法
如果您想了解更多,这篇文章: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