Ich hatte in C# programmiert, war aber frustriert von den Einschränkungen seines Typsystems. Eines der ersten Dinge, die ich über Scala erfuhr, war, dass Scala höhere Generationsgattungen hat. Aber selbst nachdem ich mir eine Reihe von Artikeln, Blogeinträgen und Fragen angeschaut hatte, war ich mir immer noch nicht sicher, welche höherklassigen Generika es waren. Wie auch immer, ich hatte etwas Scala-Code geschrieben, der in Ordnung war, . Verwendet dieses Snippet höhere Arten?Scala: Höhere Klassen-, Open-Typ- und Wildcard-Generics in Java, C#, Scala und C++
abstract class Descrip [T <: DTypes, GeomT[_ <: DTypes] <: GeomBase[_]](newGeom: NewGeom[GeomT])
{
type GeomType = GeomT[T]
val geomM: GeomT[T] = newGeom.apply[T]()
}
Und dann dachte ich, vielleicht schon mit mir höher kinded Generika. Wie ich es verstehe, war ich es, aber dann, als ich es jetzt verstehe, hatte ich bereits glücklichere Typen in C# benutzt, bevor ich überhaupt von Scala gehört hatte. Verwendet dieses Snipet einen höheren Typ?
namespace ConsoleApplication3
{
class Class1<T>
{
List<List<T>> listlist;
}
}
So weitere Verwirrung zu vermeiden Ich dachte, es wäre nützlich für jeden von Java, C# und Scala, was sie in Bezug auf die Höhere kinded Typen, Wildcards und die Verwendung offener/teilweise offenen Typen erlauben zu klären. Der Hauptunterschied zwischen C# und Scala scheint zu sein, dass Scala Platzhalter und offene Typen erlaubt, während C# keine Platzhalter hat und alle generischen Typen vor der Verwendung geschlossen werden müssen. Ich weiß, dass sie etwas anderes sind, aber ich denke, es wäre nützlich, die Existenz dieser Features mit ihrer Entsprechung in C++ - Templates in Beziehung zu setzen.
So ist das Folgende korrekt? Diese Tabelle ist für Alexey Antwort korrigiert
Lang: Higher-kind Wild-card Open-types
Scala yes yes yes
C# no no no
Java no yes no
C++ yes yes yes
Was ist Ihre Frage? –
Ist die Tabelle unten korrekt? Wenn es jemand besser formatieren kann? –
Was Sie in C# geschrieben haben, ist in Java verfügbar, und nicht in Height kinded. Ihre Klasse mit dem obigen GeomT-Parameter ist. Siehe http://stackoverflow.com/a/10499788/754787. –