在groupBy的方法签名中:
def groupBy[K](f : (A) => K) : Map[K, This]
groupBy上[K]的类型参数如何输入?在这种情况下[k]的意义是什么:groupBy [K]。为什么这里需要类型参数,这是Scala的一个要求,而不能使用:def groupBy(f : (A) => K) : Map[K, This]
?
答案 0 :(得分:2)
How is the type parameter of [K] on groupBy typed ?
从传递给groupBy
的函数类型,除非明确传递。
What is the significance of [k] in this context : groupBy[K] .
这是一个类型参数:在groupBy
的定义网站上未修复的类型,而是根据此方法的每个使用网站的上下文而变化。
Why is the type parameter required here, is this a requirement of Scala that cannot use instead : `def groupBy(f : (A) => K) : Map[K, This]` ?
这是一项要求。在您提供的定义中,传递给groupBy
的函数必须是A
(类的类型参数)到K
,groupBy
定义的固定类型}。由于Scala中没有类型K
,因此会自动出错。
或者,换句话说,就像将groupBy
定义为def groupBy(f: (A) => String): Map[String, This]
一样。
答案 1 :(得分:1)
K是方法级别类型参数,它不存在于类中。所以你的建议没有意义。 K也需要声明为类型参数,因为我假设你不想引用类型K,而是引用类型变量K.
答案 2 :(得分:0)
列表在scaladoc中定义为sealed abstract class List[+A]
- 所以A是列表中元素的类型。您可以按任何函数f: (A) ⇒ K
对列表元素进行分组,也就是说K可以是任何类型。如果您要通知编译器您可以按"函数f: (A) ⇒ K
进行分组,其中K是某种类型",则需要声明符号K.这是在方法级别完成的,因为K仅用于方法级别。这是通过声明def groupBy[K](f: (A) ⇒ K): Map[K, List[A]]
来完成的。希望这很清楚。
答案 3 :(得分:0)
首先指定K,因为KeySelector函数的类型,(A)=> K,结果的类型:Map [K,this]取决于它的定义。 K是类型参数,它允许groupBy实现通过任何类型的Key对组进行抽象。