Из любопытства, есть ли языки, которые позволяют вам задавать арифметику для типов для создания новых типов? Что-то вроде:
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Операция может быть эмулирована множественным наследованием.