Ich versuche zur Laufzeit herauszufinden, ob meine Funktion eine andere Funktion überschreibt.Überprüfen, ob meine Funktion eine andere Funktion überschreibt
Betrachten Sie das folgende hypothetische Szenario. Ich implementiere eine Funktion namens freqz
, die in MATLAB vorhanden sein kann, wenn die Signal Processing Toolbox installiert ist. Wenn es tatsächlich bereits als Teil der Toolbox existiert, möchte ich es in meinem eigenen Namen nennen und das Ergebnis zurückgeben. Wenn es nicht existiert, möchte ich, dass meine eigene Funktion ihre eigene Verarbeitung durchführt.
Hier ist ein Beispiel Pseudo-Code
function foo(args)
if overrides_another_function(foo)
func = find_overriden_function(foo);
result = func(args);
else
result = my_own_processing(args);
return result;
In diesem Fall, wenn jemand foo
nennt, werden sie die Version erhalten, die sie erwarten, und wieder auf meine eigene Implementierung fallen, wenn foo
von anderswo nicht verfügbar ist. Ist MATLAB in der Lage, so etwas zu tun?
Was ich versucht habe:
- Aufruf
exist
innerhalbfoo
gibt immer2
(Funktion vorhanden ist), da eine Funktion betrachtet wird erklärt, wenn wir in ihm zum ersten Mal passiert. - Das Ausführen von
exist
von außerhalb einer Funktion in einer m-Datei ist ungültige MATLAB-Syntax. - Ich habe keine Möglichkeit gefunden, alle Funktionen mit einem bestimmten Namen aufzulisten. Wenn das möglich ist, würde mich das auf halbem Weg hinbringen (ich würde zumindest etwas über Existenz wissen, müsste aber trotzdem herausfinden, wie ich auf die überschriebene Funktion zugreifen kann).
Sie können einen Unterordner in Ihrem Arbeitsbereich erstellen "Ihre" Funktionen enthält. Zunächst sollten sie Ihrer Hauptfunktion unbekannt sein, so dass Sie nach der Existenz der ursprünglichen Funktion ('which' usw.) suchen können. - Wenn das Ergebnis leer ist, können Sie' addpath' verwenden, um den Ordner mit Ihrer benutzerdefinierten Funktion hinzuzufügen. Es gibt wahrscheinlich elegantere Möglichkeiten, objektorientierte Programmierung zu verwenden. Aber ich bin nicht vertraut damit. – thewaywewalk
Hat eine der hier angebotenen Lösungen für Sie funktioniert? – Divakar