2012-12-10 16 views

Antwort

6

Ich begann mit der vorherigen Frage vertrödeln, versuchen dynamisch, um herauszufinden, welche Felder waren einstellbar.

Ich habe es nicht ganz zum Laufen gebracht, aber ich konnte die meisten der schreibgeschützten Eigenschaften bekommen, indem ich die Differenz zwischen den Rückgabewerten set(h) und get(h) verwendete.

Die einzige Eigenschaft, die hier nicht angezeigt wird, ist die Parent -Eigenschaft, die einstellbar ist, aber in der vorherigen Frage nicht geändert werden soll.

Hier ist, wie ich die nicht-einstellbaren Eigenschaften erhielt:

h = plot(1:0.2:10); 
xx=get(h) 

close all 
h2 = plot(0); 
settableHandles = set(h2); 
settableNames = fieldnames(settableHandles); 
allHandles = get(h2); 
allNames = fieldnames(allHandles); 

nonSettableHandles = rmfield(allHandles,settableNames); 
nonSettableNames = fieldnames(nonSettableHandles) 

Dies erzeugt eine Zelle von nonSettableNames:

nonSettableNames = 

    'Annotation' 
    'BeingDeleted' 
    'Type' 
+2

Ich denke, Sie können alles auf einen einzigen Liner reduzieren: 'Feldnamen (rmfield (get (h), Feldnamen (set (h)))). Ziemlich clever, +1. –

+2

@EitanT +1 für den einen Liner! – user1884905

+0

+1 - Ich habe nie bemerkt, dass ich einen Rückgabewert von 'set' bekommen kann! – Jonas

2

warum nicht etwas verwenden, wie

try 
    %// [set property] 

catch ME 
    if ~isempty(regexp(ME.error, 'read only')) 
     continue; 

    else 
     %// [handle other error] 

    end 

end 
+0

Nice - sind die try/catch-Blöcke teuer in Matlab? – ccook

+0

copyobj wurde besprochen, aber es verwendet direkt den Plot-Handler, nicht die Plot-Eigenschaften :) – ccook

+1

Nun, sie * können * sein, besonders wenn sie in einer Schleife verwendet werden; der 'ME'-Teil ist ein Aufruf an die' MException'-Klasse, die nicht eingebaut ist, so dass keine Schleife durch JIT beschleunigt wird. Dies gilt jedoch nicht, wenn Sie externe Anrufe trotzdem verwenden. Außerdem - ich denke, es ist nicht wahrscheinlich, dass dein 'try ... catch' wirklich sehr teuer im Vergleich zu allem anderen sein wird. –

Verwandte Themen