Scala函数子类型

在Scala中

有函数f1: Father1 => Child2 为函数 f2: Child1 => Father2 的子类型

原因如下:

一个函数只有在调用的时候才会执行,f1(father1:Father1)是调用形式,f2(child1:Child1)是调用形式,当需要将函数作为一个参数传递的时候,可以将f1传递给需要f2的函数。

首先,作为返回值,f1的返回值为f2的返回值的子类型,OK!

其次,考虑f(f2:Child1 => Father2){...},在f中调用f2时,传递的是参数是child1:Child1,当调用f时有f(f1),则在实际中被调用的是f1(child1:Child1),因此所有f1中的操作都是安全的,因为f1是被设计用于调用Father1的,Bingo!


为何f1: Child1 => Child2不为函数f2: Father1 => Father2的子类型?

考虑f(f2:Father1 => Father2){...},在f中调用f2时,传递的是参数是father1:Father1,当调用f时有f(f1),则在实际中被调用的是f1(father1:Father1),因此所有f1中的操作并不都是安全的,因为f1是被设计用于调用Child1的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 如果一种东西在别人还没有搞清楚之前你学会了,市场就会奖励你。
    金牛派阅读 134评论 0 0
  • 中国自春秋战国时期就形成了各种不同的文化传统,如秦文化、三晋文化、齐鲁文化、楚文化、岭南文化、巴蜀文化等。这些文化...
    屡空阅读 782评论 3 4
  • 哪个自信的女孩不是有自己的一套努力方法🤗大家都总结一套心德分享……
    AnSYoga抬头看见太阳花阅读 235评论 0 1
  • 回忆没有归途,唯有前行 夕阳晚照无限好,只是过渡 夜,总会降临,此后还有黎明 可是此刻,无法预知,明日心情 既在人...
    橘子sandglass阅读 218评论 0 0
  • 竹篱笆、雕花窗、琉璃瓦、青花瓷。她是个宋词一样的女子。从十七岁起,他是她唯一的词。 她不知道自己有着怎样的身世,从...
    简微柠Jean阅读 243评论 0 2

友情链接更多精彩内容