2013-08-23 6 views
6

Ich habe ein großes Projekt mit über 40 Funktionen und es wächst nur jeden Tag. Oft referenziere ich eine Funktion mehrfach aus verschiedenen Skripten. Hin und wieder stelle ich fest, dass ich eine Funktion für ein Skript bearbeiten muss, und dann stelle ich fest, dass es möglich ist, dass diese Funktion für ein anderes Skript gleich bleibt. Offensichtlich ist das an sich kein Problem; Ich kann einfach eine neue Funktion schreiben. Aber manchmal erinnere ich mich nicht, ob ich irgendwo anders in meinem größeren Ordner, der alle meine Skripte enthält, auf diese Funktion verwiesen habe!Gibt an, wie häufig eine Funktion in einem Ordner/einer Datei in MATLAB referenziert wird.

Gibt es einen Weg in MATLAB irgendwie zu finden, wie oft eine Funktion innerhalb eines Ordners verwendet wird? Wenn ja, gibt es eine Möglichkeit zu verfolgen, woher es referenziert wird? Danke im Voraus =).

Antwort

6

Dafür verwende ich normalerweise die finden Dateien Funktionalität (im Menü oben auf Ihrem Bildschirm gefunden) mit der Option "enthält". Vor allem, wenn Ihr Funktionsname nicht mit den üblichen Variablennamen übereinstimmt, funktioniert das sehr gut.

Suchen Sie einfach im gesamten Matlab-Pfad oder im spezifischen Verzeichnis nach etwas wie myFun( und Sie werden alle Orte sehen, an denen es aufgerufen wird. Im schlimmsten Fall finden Sie auch einige Stellen, an denen es nicht genannt wird.

+0

Das ist perfekt! Ich wusste, MATLAB würde etwas dafür haben, sie haben ziemlich gute Benutzeroberflächen = p. Vielen Dank! – spaderdabomb

+0

+1 Völlig übersehen dies. Verdammt, neue Matlab-Benutzeroberfläche;) – Deve

2

Ich kenne keine eingebaute Matlab-Funktionalität, die dies tut, also müssen Sie wahrscheinlich eine Funktion schreiben, um dies für Sie zu tun.

Mit der Funktion DIRWALK von Matlab FileExchange können Sie Ihren Projektordner durchsuchen und alle Matlab-Dateien (verwenden Sie den Befehl what) nach Ihrem Funktionsnamen durchsuchen.

5

MATLAB bietet Unterstützung für die Abhängigkeitsverfolgung unter Verwendung der depfun-Funktion. depfun sagt Ihnen, welche anderen Funktionen benötigt werden, um eine bestimmte Funktion auszuführen.

Was Sie fragen, ist das umgekehrte Problem: Welche Funktionen benötigen eine bestimmte Funktion?

Mit depfun können Sie eine umgekehrte Suche durchführen. Hier ist ein kurzes Beispiel:

function result = invdepfun(allFunctions, lookFor) 
% Return all functions that depend on a given function 
% 
% Example: invdepfun({'myfun1', 'myfun2', 'myfun3'}, 'myfun4') returns all of 
% 'myfun1', 'myfun2', 'myfun3' that use 'myfun4'. 

    filename = which(lookFor); 

    result = {}; 
    for i = 1 : numel(allFunctions) 
     deps = depfun(allFunctions{i}, '-quiet'); 
     if any(strcmpi(deps, filename)) 
      result{end + 1} = allFunctions{i}; 
     end 
    end 
end 

Sie verschiedene andere MATLAB-Funktionen verwenden können (which, dir, etc.) zu autmatically eine Liste aller Funktionen zusammenstellen, um invdepfun als erstes Argument übergeben.

Siehe auch this post on File Exchange.

+0

Wie die FEX-Einreichung, aber kann dir das auch zeigen, wie oft eine Funktion von jeder Funktion aufgerufen wird? –

+0

Definitiv nützlich auch =) – spaderdabomb

+0

@DennisJaheruddin: Meine Lösung wird Ihnen nur zeigen, welche Funktionen Ihre Funktion verwenden, nicht, wie oft sie es verweisen. Soweit ich das beurteilen kann, gilt dies auch für die FEX-Einreichung. Sie können die absolute Anzahl der Laufzeitaufrufe mit der Ausgabe von 'profile ('info')' ermitteln, aber das ist etwas anderes. Warum brauchst du diese Nummer? –

Verwandte Themen