List("a").contains(5)
因为a Int永远不会包含在列表中String,所以这应该在编译时生成错误,但事实并非如此.
它浪费并默默地测试String列表中包含的每个内容的相等性5,这些内容永远不会成立(在Scala中"5"永远不等于5).
这被称为" '包含'问题 ".而一些人暗示,如果一个类型系统无法正确地输入这样的语义,那么为什么要经过强制执行类型的额外的努力.所以我认为这是一个需要解决的重要问题.
类型参数化B >: A的List.contains输入的任何类型的是该类型的超类型A(包含在列表中的元素的类型).
trait List[+A] {
   def contains[B >: A](x: B): Boolean
}
此类型参数化是必要的,因为+A声明列表在类型上是协变的A,因此A不能在逆变位置中使用,即作为输入参数的类型.协变列表(必须是不可变的)对于扩展比强制列表(可以是可变的)更强大.
A是String在上面的例子有问题,但Int不是的超类型String,所以发生了什么事?该隐含包容 Scala中,决定Any是两者的相互超String和Int.
Scala的创建者Martin Odersky 建议修复将限制输入类型B仅限于那些具有equals方法的类型Any.
trait List[+A] …我尝试向 Scala 用户发布这个问题,但尚未回复。如何通过 Scala.JS 使用新的实验性 Scala 3?我无法\xe2\x80\x99找到令人信服的说明。
\n令人震惊的是,我在互联网上找不到任何关于这个主题的信息。
\n例如,我读到(并在 Scala 3 源代码中验证),当集成被编译到 dotc 编译器中时,没有插件。那么我应该如何处理 Scala.js 网站上指示我向构建文件添加插件的说明呢?
\n