He estado programando en C#, pero estaba frustrado por las limitaciones de su sistema de tipos. Una de las primeras cosas que aprendí sobre Scala fue que Scala tiene genéricos de mayor calidad. Pero incluso después de haber analizado una serie de artículos, entradas de blog y preguntas, todavía no estaba seguro de cuáles eran los genéricos de mayor calidad. De todos modos, había escrito un código Scala que compilaba bien, ¿Este fragmento utiliza tipos superiores?Scala: genéricos de tipo kinded, open-type y wild más altos en Java, C#, Scala y C++
abstract class Descrip [T <: DTypes, GeomT[_ <: DTypes] <: GeomBase[_]](newGeom: NewGeom[GeomT])
{
type GeomType = GeomT[T]
val geomM: GeomT[T] = newGeom.apply[T]()
}
Y entonces pensé que tal vez ya estoy usando genéricos más alta kinded. Como yo lo entiendo, lo estaba, pero entonces, como ahora lo entiendo, ya había estado felizmente usando tipos de mayor kínder en C# antes de siquiera haber escuchado sobre Scala. ¿Utiliza este snipet un tipo más alto de kinded?
namespace ConsoleApplication3
{
class Class1<T>
{
List<List<T>> listlist;
}
}
Así que para evitar más confusión que pensé que sería útil aclarar a cada una de Java, C# y Scala lo que permiten en términos de mayor kinded tipos, comodines y el uso de tipos de apertura/parcialmente abiertas. Como la diferencia clave entre C# y Scala parece ser que Scala admite comodines y tipos abiertos, mientras que C# no tiene comodín y requiere que todos los tipos genéricos se cierren antes de su uso. Sé que son algo diferente, pero creo que sería útil relacionar la existencia de estas características con su equivalente en las plantillas de C++.
¿El siguiente es correcto? Esta tabla se ha corregido la respuesta de Alexey
Lang: Higher-kind Wild-card Open-types
Scala yes yes yes
C# no no no
Java no yes no
C++ yes yes yes
¿Cuál es tu pregunta? –
¿Es correcta la tabla de abajo? Si alguien puede formatearlo mejor, ¿por qué no? –
Lo que ha escrito en C# está disponible en java, y no en Kinder más alto. Tu clase con el parámetro GeomT arriba es. Ver http://stackoverflow.com/a/10499788/754787. –