Ich sah die Antwort auf die Frage: Can all usages of forSome
be replaced by an equivalent usage of _
?, aber nicht verstehen, was ist der echte Fall, wo "_" kann nicht anstelle von "forSome" verwendet werden. Ich lese in Programming in Scala Buch, dass:Wirkliches Beispiel von "Können alle Verwendungen von` forSome 'durch eine äquivalente Verwendung von `_` ersetzt werden?"
Existentielle Typen ein vollständig unterstützter Teil der Sprache, aber in der Praxis sie werden hauptsächlich verwendet, wenn Java-Typen von Scala erreichbar. habe ich Scala-Projekt und Java ein, um diese Seite verwiesen:
Scala:
object Main {
def main(args: Array[String]): Unit = {
type Test = java.util.Collection[T] forSome { type T }
val contents: Test = (new Wild).contents
type Test2 = java.util.Collection[_]
val contents2: Test2 = (new Wild).contents
// foo((new Wild).contents2) // won't compile
foo1((new Wild).contents2)
foo1((new Wild).contents3)
foo2((new Wild).contents3)
}
def foo(xs: java.util.Map[T, T] forSome { type T }) {}
def foo1(xs: java.util.Map[_, _]) {}
def foo2(xs: java.util.Map[_, _ <: java.lang.Number]) {}
}
Java:
public class Wild {
public Collection<?> contents() {
return null;
}
public Map<?, ?> contents2() {
return null;
}
public Map<?, ? extends Number> contents3() {
return null;
}
}
In allen Fällen konnte ich "forsome" mit „ersetzen _ ". Was sind also echte Fälle, in denen "forSome" notwendig ist? Bitte geben Sie ein einfaches Arbeitsbeispiel an.
Vielen Dank! Es ist jetzt klar. – user4298319