gpt4 book ai didi

scala - `contains[BB >: B](e: BB): Boolean` 而不是 `contains(e: Any): Boolean` 的好处

转载 作者:行者123 更新时间:2023-12-01 13:33:01 25 4
gpt4 key购买 nike

contains 定义为 contains[BB >: B](e: BB): Boolean 而不是 contains(e: Any) 有什么好处: Scala 中的 bool 值

Either.contains在 Scala 标准库中使用第一个签名,我不清楚这种签名相对于第二个签名的好处。

最佳答案

在这种情况下,无:两个签名是等价的。但它提供了与其他成员签名的一致性,例如

 getOrElse[BB >: B](or: ⇒ BB): BB

对他们来说,这是有区别的,因为 BB 是返回类型的一部分,所以如果我们传递一个 B,我们得到 B返回,我们不会使用 getOrElse(or: => Any): Any

What boggles me is why you would ever want to pass something that's not a B to that function

你不会。但是 contains(e: B) 不允许 Either 协变。试试吧,编译器会以B出现在逆变位置为由拒绝它。协方差意味着例如Either[A, SubtypeOfFoo]Either[A, Foo] 的子类型。所以任何对 Either[A, Foo] 合法的调用也必须对 Either[A, SubtypeOfFoo] 合法,这包括 contains(Foo).

关于scala - `contains[BB >: B](e: BB): Boolean` 而不是 `contains(e: Any): Boolean` 的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44741964/

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