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ć.
A
a 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ść A
a 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)
.
Or
operacja może być emulowana przez wielokrotne dziedziczenie.