Z ciekawości, czy istnieją języki, które pozwalają ci ustawiać arytmetykę typów, aby tworzyć nowe typy? Coś jak:
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()
Wiem, że w niektórych językach można wyrażać te idee (tj. Java ma List<Comparable & Serializable>na celu połączenie interfejsów), ale nigdy nie słyszałem o języku, który obsługuje arytmetykę typów. Dzięki!
CanWriteAndCompare extends Serializable, Comparable {}) I zastanawiałem się, jak to uogólnić.
Aa lub a B, z dwiema implementacjami, które wyglądają dokładnie tak samo. W metodzie nazywam metodę polimorficzną, która może przyjąć wartość Aa lub a B, więc implementacje są takie same, ale ponieważ muszę wziąć dwa różne typy, potrzebuję dwóch implementacji. Byłoby łatwiej, gdybym mógł myMethod(A | B aOrB).
Oroperacja może być emulowana przez wielokrotne dziedziczenie.