scala:为什么scala允许使用Map / List / etc实现函数文字

时间:2018-01-29 05:34:44

标签: java scala

我定义了这样的scala特征:

trait Example {
  def func: Int => Int
}

编译器允许我通过以下方式实现它:

class SomeClass extends Example {
   def func = Map(1->2, 3->4)
}

我可以将Map替换为List它仍然可以使用。我的问题是:为什么?我不是将func声明为需要作为函数实现的函数文字吗?

在更深层次上,scala的编译器如何检查函数签名?

非常感谢!

1 个答案:

答案 0 :(得分:4)

Int => Int desugers转向Function1[Int, Int]Map[K, V]List[A]都将Function1[A, B]特征扩展为其集合层次结构的一部分,这就是编译器允许这些类型作为具体实现的原因。

例如,Map:

trait MapLike[K, +V, +This <: MapLike[K, V, This] with Map[K, V]] extends PartialFunction[K, V]

PartialFunction[K, V]扩展Function1[K, V]

的位置