【发布时间】:2017-11-28 05:53:44
【问题描述】:
在 Scala 中将 contains 定义为 contains[BB >: B](e: BB): Boolean 而不是 contains(e: Any): Boolean 有什么好处。
Scala 标准库中的Either.contains 使用第一个签名,我不清楚这种签名相对于第二个签名的好处。
【问题讨论】:
-
类型安全。传递不是 BB >: B 将在编译时失败
-
@MrD 我猜,问题是如何你可以传递不是
B的超类的东西。一切都是Any,而Any是B的超类......没有类型,这个函数不会接受AFAICS。 -
你不能传递不是 B 超类的东西,这就是重点。所以基本上没有 B 的子类型。我认为这是因为 B 中需要有一个正确定义的 == 可以用于比较
-
@MrD 除非您明确提供参数类型,否则您可以传递给
contains的任何内容都无法进行类型检查。试试看,你会看到的。 -
令我感到困惑的是,为什么您会想要将不是
B的东西传递给该函数...
标签: scala standard-library either