Ja, das ist möglich, aber es erfordert ein wenig Hacking. Es erfordert, dass Sie einige Funktionshandles kopieren.
Anhand des Beispiels in der Frage werde ich zeigen, wie Sie die Funktion openvar
in eine benutzerdefinierte Funktion umwandeln, die die Größe der Eingabevariablen überprüft und dann den Benutzer jede offene Operation für zu große Variablen abbrechen kann.
Darüber hinaus sollte dies funktionieren, wenn der Benutzer im Arbeitsbereich der Matlab-IDE auf eine Variable doppelklickt.
Wir müssen drei Dinge tun.
- Erhalten Sie einen Griff zum Original
openvar
Funktion
- die Wrapper-Funktion definieren, die
openvar
- Umleiten der ursprünglichen
openvar
Namen auf unserer neuen Funktion aufruft.
Beispiel Funktion
function openVarWrapper(x, vector)
maxVarSize = 10000;
%declare the global variable
persistent openVarHandle;
%if the variable is empty then make the link to the original openvar
if isempty(openVarHandle)
openVarHandle = @openvar;
end
%no variable name passed, call was to setup connection
if narargin==0
return;
end
%get a copy of the original variable to check its size
tmpVar = evalin('base', x);
%if the variable is big and the user doesn't click yes then return
if prod(size(tmpVar)) > maxVarSize
resp = questdlg(sprintf('Variable %s is very large, open anyway?', x));
if ~strcmp(resp, 'Yes')
return;
end
end
if ischar(x) && ~isempty(openVarHandle);
openVarHandle(x);
end
end
Sobald diese Funktion dann müssen Sie definiert ist einfach ein Skript auszuführen, dass
- alle Variablen
openvar
- laufen namens Löscht das
openVarWrapper
Skript zum Einrichten der Verbindung
- zeigen Sie das Original,21 Tausend zu
openVarWrapper
Beispiel Script:
clear openvar;
openVarWrapper;
openvar = @openVarWrapper;
Schließlich, wenn Sie wollen, dass alles aufzuräumen können Sie einfach anrufen:
clear openvar;
Ich bin damit einverstanden, die Antwort, die Sie auf der anderen Frage gestellt (http://stackoverflow.com/questions/11779511/how-to-interrupt-matlab-ide-when-it-hangs-on-displaying-very-large- Array) ist gut für diese Frage slayton, aber die allgemeine Frage hat eine bessere Antwort - siehe unten. – jmetz