Ein einfacher Weg, dies zu tun, ist zu sehen, ob publish
im Call-Stack ist. dbstack
gibt ein Array von struct
s zurück, die angeben, welche Funktionen in welcher Reihenfolge aufgerufen wurden, um zu dem Punkt zu gelangen, an dem wir dbstack
aufrufen. Wir können die name
Eigenschaft verwenden, um uns die Namen aller dieser Funktionen zu nennen und zu sehen, ob publish
unter ihnen ist. Wenn dies der Fall ist, nehmen wir an, dass das Skript über publish
aufgerufen wurde.
stack = dbstack;
isBeingPublished = ismember('publish', {stack.name});
Oder wenn Sie wollen, dass ein Einzeiler sein
isBeingPublished = ismember('publish', cellfun(@(x)x.name, dbstack, 'UniformOutput', 0));
Dies sollte funktionieren, ob Sie Ihr Skript veröffentlichen die Symbolleiste oder über die Befehlszeile mit
publish('myscript.m')
veröffentlichen mit
Wenn Sie wirklich schick werden wollten, könnten Sie pause
überlasten (oder schreiben Sie Ihre eigene Version, mypause
), die thi tut s check für dich. Das funktioniert, weil innerhalb Ihrer neuen pause
Funktion dbstack
immer noch publish
enthält, weil Sie es aus Ihrem Skript aufgerufen haben, das schließlich von publish
ausgewertet wurde. Wenn Sie diese Funktion erstellen, benötigen Sie nicht die gesamte Logik in Ihrem Code und können stattdessen einfach mypause()
aufrufen.
function mypause(varargin)
stack = dbstack;
if ~ismember('publish', {stack.name});
builtin('pause', varargin{:})
end
end
Schöne Antwort! Ein Kommentar/eine Warnung für alle, die mit MATLAB nicht vertraut sind. Mit MATLAB können Sie die Namen von Parameterpaaren kürzen (http://stackoverflow.com/q/25907412/2338750), wenn sie in weniger Buchstaben eindeutig identifiziert werden können. Also, 'uni, 0' ist die Abkürzung für' UniformOutput, false'. Die Fallstricke sind: Wenn Mathworks entscheidet, dass sie ein "UniformInput", "UniqueOutput", "niversal" oder ähnliches wollen, werden alle Codes mit "uni" fehlschlagen. Ich würde daher vorschlagen, dass Sie immer die Zeit nehmen, den vollständigen Namen für Parameterpaare zu schreiben. –
@StewieGriffin Großartiger Punkt. Ich benutze immer '' uni '' aus Gewohnheit, werde mich aber definitiv bemühen, es auszudrücken. Vielen Dank. – Suever
In meiner Matlab-Bibliothek Startfunktion habe ich: cu = @ (f, x) cellfun (f, x, 'UniformOutput', false); Reinigt Code, wie Sie es nicht glauben würden. – John