微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我定义了这样的scala特征:

trait Example {
  def func: Int => Int
}

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

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

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

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

谢谢你!

解决方法:

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

例如,地图:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐