2012-12-10 12 views

cevap

6

gibi bir şey kullanmak İlgili bir soru ortaya çıktı ayarlanabilir.

Çalışmayı tam olarak başaramadım ancak set(h) ve get(h) arasındaki geri dönüş değerleri arasındaki farkı kullanarak salt okunur özelliklerin çoğunu tutabiliyordum.

Burada görünmeyen tek özellik, Parent -property'dir, ancak bu bir önceki soruda değiştirilmemesi gereken bir ayardır.

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) 

Bu nonSettableNames bir hücreyi oluşturur: Burada

ben olmayan ayarlanabilir özelliklere var nasıl

nonSettableNames = 

    'Annotation' 
    'BeingDeleted' 
    'Type' 
+2

Sanırım her şeyi tek bir astarla azaltabilirsiniz: 'fieldnames (rmfield (get (h), fieldnames (set (h)))). Oldukça zeki, +1. Bir astar için –

+2

@ EitanT +1! – user1884905

+0

+1 - 'set'den bir dönüş değeri alabileceğimi bile fark etmedim! – Jonas

2

neden olmasın

try 
    %// [set property] 

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

    else 
     %// [handle other error] 

    end 

end 
+0

Güzel - Try/catch bloğu Matlab pahalıdır? – ccook

+0

copyobj tartışıldı, ancak arsa özelliklerini değil, arsa özelliklerini kullanır :) – ccook

+1

Peki, özellikle bir döngüde kullanıldığında; “ME” kısmı, yerleşik olmayan “MException” sınıfına yapılan bir çağrıdır, dolayısıyla herhangi bir döngü JIT tarafından hızlandırılmaz. Ancak yine de harici aramalar kullandığınızda bu uygulanamaz. Ayrıca - sanırım, "yakalamaya çalış" ın geri kalanına kıyasla gerçekten çok pahalı olacağını düşünmüyorum. –

İlgili konular