如果要通過屬性結構複製圖形,則需要過濾掉只讀屬性(例如Annotation,BeingDeleted,Parent,Type)。有沒有辦法獲得對象的只讀屬性列表?獲取繪圖的只讀屬性名稱列表
的問題從一個相關的問題出現
How can I plot from a plot handler?
如果要通過屬性結構複製圖形,則需要過濾掉只讀屬性(例如Annotation,BeingDeleted,Parent,Type)。有沒有辦法獲得對象的只讀屬性列表?獲取繪圖的只讀屬性名稱列表
的問題從一個相關的問題出現
How can I plot from a plot handler?
我開始淤泥與周圍的前一個問題,試圖動態找出哪些領域是設定。
我並沒有完全使用它,但是我可以通過使用返回值set(h)
和get(h)
之間的差異來獲得(大部分)只讀屬性。
這裏沒有顯示的唯一屬性是Parent
-屬性,可以設置但不應在上一個問題中更改。
這裏是我得到了無法設定的屬性:
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)
由此產生的nonSettableNames
細胞:
nonSettableNames =
'Annotation'
'BeingDeleted'
'Type'
爲什麼不使用類似
try
%// [set property]
catch ME
if ~isempty(regexp(ME.error, 'read only'))
continue;
else
%// [handle other error]
end
end
我想你可以把所有事情都減少到一行:'fieldnames(rmfield(get(h),fieldnames(set(h))))''。非常聰明,+1。 –
@EitanT +1爲單行! – user1884905
+1 - 我從來沒有注意到我可以從'set'獲得返回值! – Jonas