gpt4 book ai didi

function - 为什么Function [-A1,…,+ B]与允许任何父类(super class)型作为参数无关?

转载 作者:行者123 更新时间:2023-12-03 08:50:33 24 4
gpt4 key购买 nike

我相信可以将协方差(至少对于对象而言)定义为“使用较窄(子)类型的值代替某些较宽(超)类型的值的能力”,并且该协方差与这个。

显然,Scala函数是用于协变参数类型A1等和协变返回类型B的Function [-A1,...,+ B]的实例。尽管这对于函数的子类型来说很方便,但上面的定义并不意味着我可以传递任何父类(super class)型作为参数吗?

请告知我在哪里弄错了。

最佳答案

协方差和相反方差是类别的质量,而不是参数的质量。 (它们是取决于参数的品质,但它们会声明有关类的信息。)

因此,Function1[-A,+B]意味着采用A的父类(super class)的函数可以视为原始函数的子类。

让我们在实践中看一下:

class A
class B extends A
val printB: B => Unit = { b => println("Blah blah") }
val printA: A => Unit = { a => println("Blah blah blah") }

现在假设您需要一个知道如何打印 B的函数:
def needsB(f: B => Unit, b: B) = f(b)

您可以传递 printB。但您也可以传入 printA,因为它也知道如何打印 B s(甚至更多!),就像 A => UnitB => Unit的子类一样。这恰恰是反差的意思。这并不意味着您可以将 Option[Double]传递给 printB并获得除编译时错误之外的任何内容!

(另一种情况是协方差: M[B] <: M[A],如果是 B <: A。)

关于function - 为什么Function [-A1,…,+ B]与允许任何父类(super class)型作为参数无关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10603982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com