美文网首页
Scala函数子类型

Scala函数子类型

作者: liqing151 | 来源:发表于2018-05-29 19:33 被阅读2次

在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的。

相关文章

网友评论

      本文标题:Scala函数子类型

      本文链接:https://www.haomeiwen.com/subject/cvoajftx.html