Abstrakte Typen und Vererbung in Julia

Angenommen, ich definiere eine Funktion für einen abstrakten Typ A in Julia:

abstract A
function mysum(a::A)
  a.x + a.y
end

Implizit sollte jeder Untertyp die Felder x und y haben, damit diese Funktion funktioniert. Die auf A definierten Funktionen bestimmen also die Anforderungen für Untertypen. Diese Funktionen können überall geschrieben werden und man kann sich eine Situation vorstellen, in der die Funktionen viel komplexer sind und die Anforderungen schwerer zu erkennen sind. Gibt es eine Möglichkeit, die Anforderungen zu deklarieren, die ein Subtyp eines abstrakten Typs außer implizit nur von Funktionen haben muss?

Dies scheint mit @ zu tun zu hab Julia # 6975 aber wenn es nichts damit zu tun hat, könnte jemand den Unterschied klären.

Finally, warum sollte jemand eine Typvereinigung anstelle eines abstrakten Typs verwenden wollen. Der abstrakte Typ ist flexibler und erweiterbarer, die Typvereinigung ist fest. Beispielsweis

Warum das

type A
  x
end

type B
  x
end

typealias C Union{A,B}

An Stelle von

abstract C

type A <: C
  x
end

type B <: C
  x
end

Antworten auf die Frage(2)

Ihre Antwort auf die Frage