Чи не цікаво, чи існують мови, які дозволяють встановлювати арифметику на типи для створення нових типів? Щось на зразок:
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()
Я знаю, що в деяких мовах ці ідеї можна висловити (тобто, Java має List<Comparable & Serializable>об'єднання інтерфейсів), але я ніколи не чув про мову, яка підтримує арифметику типу. Дякую!
CanWriteAndCompare extends Serializable, Comparable {}), і я думав, як це узагальнити.
Aабо a B, з двома реалізаціями, які виглядають абсолютно однаково. У методі я викликаю поліморфний метод, який може приймати Aабо a B, тому реалізація однакова, але оскільки мені потрібно взяти два різних типи, мені потрібно дві реалізації. Це було б простіше, якби я міг це зробити myMethod(A | B aOrB).
Orоперація може бути емульована багаторазовим успадкуванням.