Gibt es aus Neugier Sprachen, mit denen Sie Typen arithmetisch festlegen können, um neue Typen zu erstellen? So etwas wie:
interface A {
void a();
void b();
}
interface B {
void b();
void c();
}
interface C = A & B; // has b()
interface D = A | B; // has a(), b() and c()
interface E = (A & B) ^ B; // has c()
Ich weiß, dass diese Ideen in einigen Sprachen ausgedrückt werden können (dh Java hat List<Comparable & Serializable>für die Vereinigung der Schnittstellen), aber ich habe noch nie von einer Sprache gehört, die Typarithmetik unterstützt. Vielen Dank!
CanWriteAndCompare extends Serializable, Comparable {}), und ich habe darüber nachgedacht, wie ich dies verallgemeinern kann.
Aoder ein nehmen kann B, mit zwei Implementierungen, die genau gleich aussehen. In der Methode rufe ich eine polymorphe Methode auf, die ein Aoder ein annehmen kann B, daher sind die Implementierungen gleich, aber da ich zwei verschiedene Typen verwenden muss, benötige ich zwei Implementierungen. Das wäre einfacher, wenn ich es könnte myMethod(A | B aOrB).
OrOperation kann durch Mehrfachvererbung emuliert werden.