2015-05-29 190 views
2

是否有任何方法來檢查句柄是否存在?所以像這樣:如果我以前沒有聲明句柄,我想要一個0作爲輸出,否則一個1.Matlab - 如何檢查句柄的存在

我試過ishandle,isvalid,isfield,isempty,但它們都不工作在「不存在的字段「所以我收到一個錯誤,如果我沒有申報句柄.. 」引用到不存在的字段'SP'。「

如果我嘗試它只是工作變量而不是把手

因此, 「存在名稱」 功能:

handle.a=figure; 
exist handle.a; 

返回一個0

handle.a=figure; 
a=handle.a; 
exist a 

返回1

但我在尋找:

handle.a=figure; 
exist handle.a 

ANS = 1

%without setting the handle: 
exist handle.a 

ANS = 0

我希望我的帖子是可以理解的。 謝謝你的幫助! Klaus

+1

使用'ishandle'或'isvalid' – Daniel

+0

並閱讀'exist'的文檔。它不返回邏輯值('true'或'false')。 – horchler

+0

就像我在帖子中寫的,我嘗試了ishandle並且是無效的。我同時獲得「參考不存在的領域」SP「。」我知道存在不同的數字,但我只是想爲上述兩種情況提供不同的輸出(不是錯誤) – klaus

回答

2

讓我改述一下:您正在爲結構的字段分配句柄。現在你想測試一下這個領域是否有一個有效的句柄,並且防範所有可能出錯的東西:(1)沒有領域,(2)沒有領域,(3)它是一個數組而不是標量,(4) )它不是一個句柄,(5)它不是一個有效的句柄。

這樣:

tf = isfield(handle,'a') && isscalar(handle.a) && ishandle(handle.a); 

當然,如果你知道一些情況永遠不會發生,你可以刪除相應的測試。

+0

只是一個評論:如果使用'isscalar'來測試一個對象的大小,使用'isempty'沒有意義(一個標量不能爲空)。另外,'ishandle'應該用於圖形句柄,而'isvalid'則用於繼承'handle'類的對象(不是同一件事,實際上對兩者都進行測試會產生錯誤)。如果你不介意的話,我會糾正你的答案。 – 2015-05-29 13:48:08

+0

完美!謝謝我現在得到了它 – klaus

+0

@ CST-Link:我想讓空/標量測試明確,但你說得對,沒有必要。至少在實現句柄圖形的Matlab的新版本中,'isvalid'不會在圖形句柄上拋出錯誤,並且在測試正在被刪除的圖形的句柄時返回'false'。但是,由於在這種情況下'ishandle'也返回false,'isvalid'確實是多餘的。 – Jonas