Ich möchte im Wesentlichen Folgendes tun:
%Vor% Das heißt, erlauben Sie einem Benutzer, an meine Funktion CVODE_BDF
zu übergeben und, wenn sie keinen der Typparameter gesetzt haben, interpretieren Sie sie als CVODE_BDF{:Newton,:Dense}
. Ich weiß, dass typealias
nicht wirklich funktioniert, aber gibt es eine Möglichkeit, dies zu simulieren? Wie in der Funktion, lesen Sie T.parameters[1]
und irgendwie sehen, dass es leer war?
Sie können dies tun, wenn die Funktion Objekte dieses Typs anstelle des Typs selbst akzeptiert. ZB
%Vor%gibt
%Vor% Eine Möglichkeit besteht darin, die Typparameter ( Hier ist ein Beispiel für den in Julia definierten rationalen Zahlentyp (rational.jl): In Ihrem Beispiel könnten Sie eine Konstruktorfunktion in Ihrer {:Newton,:Dense}
) über Konstruktoren . CVODE_BDF
-Typdefinition definieren und nach den Typen suchen und auf {:Newton,:Dense}
zurückgreifen, wenn sie nicht gesetzt sind.
Würde so etwas für Sie funktionieren?
%Vor%Funktionsimplementierung:
%Vor%Wrapper, die die Standardwerte festlegen:
%Vor%Ergebnis:
%Vor%Da der letzte Aufruf etwas hässlich ist, sind Objekte wahrscheinlich die bessere Wahl, wenn maximale Flexibilität benötigt wird. Darüber hinaus können Konstruktoren Einschränkungen für die Parameter erzwingen, sodass sie in der Funktion nicht überprüft werden müssen.
Bearbeiten:
Wenn Ihre Funktion mehr als ein Argument hat, ist das Hinzufügen von Methoden für jede Kombination von Parametern zu viel Arbeit. Stattdessen kann man für jeden Typ eine Standardmethode definieren (zur Verdeutlichung nur einen Parameter):
%Vor%Bei einer aktuellen Nacht hat dies keinen Laufzeitaufwand:
%Vor% Ja, es gibt. Wenn Sie Type{CVODE_BDF}
ausführen, können Sie die Parameter des resultierenden Objekts überprüfen. Wenn CVODE_BDF
'leer' ist, wird ein CVODE_BDF
-Typ mit generischen Parametern zurückgegeben, andernfalls werden sie die spezifischen verwendet.
Beispiel (mit Array
, da ich CVODE_BDF
handy nicht habe):
Beispielfunktion:
%Vor%%Vor%
Tags und Links types julia-lang