Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala与x27之间的差异;s存在类型与Java';举例来说,什么是通配符?_Java_Scala_Type Systems_Bounded Wildcard_Existential Type - Fatal编程技术网

Scala与x27之间的差异;s存在类型与Java';举例来说,什么是通配符?

Scala与x27之间的差异;s存在类型与Java';举例来说,什么是通配符?,java,scala,type-systems,bounded-wildcard,existential-type,Java,Scala,Type Systems,Bounded Wildcard,Existential Type,有一个比堆栈溢出问题更具体的问题,Scala的存在类型和Java的通配符之间有什么区别,最好用一些说明性的例子 到目前为止,在我所看到的一切中,它们似乎相当相似 一些参考资料。马丁·奥德斯基;谷歌的: MO:原始通配符设计。。。受到存在主义类型的启发。事实上,最初的论文有一个存在类型的编码。但是当最终的实际设计在Java中出现时,这种联系有点丢失了 它们应该是等价的,因为它们的主要用途是与Java的通配符交互。这是Martin Odersky在Scala用户邮件列表上的回答: 原始Java通配符

有一个比堆栈溢出问题更具体的问题,Scala的存在类型和Java的通配符之间有什么区别,最好用一些说明性的例子

到目前为止,在我所看到的一切中,它们似乎相当相似

一些参考资料。马丁·奥德斯基;谷歌的:

MO:原始通配符设计。。。受到存在主义类型的启发。事实上,最初的论文有一个存在类型的编码。但是当最终的实际设计在Java中出现时,这种联系有点丢失了


它们应该是等价的,因为它们的主要用途是与Java的通配符交互。

这是Martin Odersky在Scala用户邮件列表上的回答:

原始Java通配符类型(如ECOOP论文中所述) 伊加拉希和维罗利)实际上只是存在主义的简写 类型。有人告诉我,我在05年的愚人报上读到过关于野生FJ的报道 通配符的最终版本与 存在类型。我不知道确切的意义是什么(他们的 形式主义与经典的存在主义类型相去甚远,不可能被理解 能够找出差异),但可能需要仔细阅读野生动物 FJ文件将对此有所启发


因此,Scala的存在类型和Java通配符似乎是等价的,它们非常相似,但Scala的存在类型应该更强大。例如,Scala的存在类型可以是上界和下界,而Java的通配符只能是上界

例如,在Scala中:

scala> def foo(x : List[_ >: Int]) = x
foo: (x: List[_ >: Int])List[Any]

foo采用了一个参数列表,其下限为Int。

马丁·奥德斯基(Martin Odersky)给出了一个更详细的答案(其余的可以找到):

Scala基本上需要三种存在类型。第一 我们需要理解Java的通配符,以及 存在类型是我们对它们的理解。第二是我们 需要了解Java的原始类型,因为它们也是 仍然在库中,未泛化的类型。如果你得到一个Java原始文件 类型,例如java.util.List它是一个您不知道 元素类型。这也可以在Scala中用一个存在主义符号来表示 类型。最后,我们需要存在类型来解释发生了什么 在高级别Scala的VM中打开。Scala使用擦除模型 泛型,就像Java一样,所以我们看不到类型参数 当程序运行时。我们必须进行擦除,因为我们需要 与Java进行互操作。但是当我们做反射时会发生什么呢 或者想要表达虚拟机中发生了什么?我们需要能够 使用Scala中的类型表示JVM的功能,以及 存在类型让我们这样做。他们让你谈论类型在哪里 你不知道这些类型的某些方面


List[\u]
表示法(正如其他答案所指出的,它是Java的
List[?]
的一个更强大的模拟)是Scala中存在类型的退化情况。

我在我的原始问题中添加了Martin Odersky的评论。阅读他对Bill Venners的回应,感觉存在类型并不等同于通配符。当然,我相当肯定我不久前读到过一些东西,基本上吹嘘Scala没有通配符类型(它最初没有)是一件积极的事情。有人向我指出,这可能是吹嘘Scala没有原始类型的事实types@oxbow_lakes,是
列表
被认为是Scala中的原始列表?一个指向整个对话的链接将是最有用的。除此之外,没有太多其他内容。因此,fotNelton似乎对其他人遗漏的一些相关内容进行了补充,了解更多内容将很有意思。如果能更清楚地解释引文的后半部分,那将很有趣……Java的通配符也支持下限。公开名单