2015-10-14 20 views
-3

如果鍵入:存在()返回意外Outupt使用動態字段名輸入

MetaSelIndPlotPARAMS.MetaLegendHandles.(CurrSelIndType).(CurrTransMethodString).Values = [1 2 3]; 

,然後嘗試使用exist

exist('MetaSelIndPlotPARAMS.MetaLegendHandles.(CurrSelIndType).(CurrTransMethodString).Values') 

它返回0,在這裏我希望可以將輸出爲1

exist似乎不使用動態字段名,因爲工作:

MetaSelIndPlotPARAMS.MetaLegendHandles.(CurrSelIndType).(CurrTransMethodString).Values 

返回:

ans = 
    1  2  3 

如何檢查在結構中的最後一個字段的存在呢?

+0

我解決了它這樣的,但它是醜陋:) – babipsylon

+1

'exist'是檢查變量,函數,文件夾或階層的存在。結構領域不是這些事情之一。這也不適用於明確的字段名稱。使用['isfield'](http://www.mathworks.com/help/matlab/ref/isfield.html)。 – excaza

回答

0

我解決了它這樣的:

if isfield(MetaSelIndPlotPARAMS,'MetaLegendHandles') 

     if isfield(MetaSelIndPlotPARAMS.MetaLegendHandles,CurrSelIndType) 

      if isfield(MetaSelIndPlotPARAMS.MetaLegendHandles.(CurrSelIndType),CurrTransMethodString) 

       if isfield(MetaSelIndPlotPARAMS.MetaLegendHandles.(CurrSelIndType).(CurrTransMethodString),'Values') 
        % do nothing 
       else 
        MetaSelIndPlotPARAMS.MetaLegendHandles.(CurrSelIndType).(CurrTransMethodString).Values = []; 
       end 

      else 
       MetaSelIndPlotPARAMS.MetaLegendHandles.(CurrSelIndType).(CurrTransMethodString).Values = []; 
      end 
     else 
      MetaSelIndPlotPARAMS.MetaLegendHandles.(CurrSelIndType).(CurrTransMethodString).Values = []; 
     end  

    else 
     MetaSelIndPlotPARAMS.MetaLegendHandles.(CurrSelIndType).(CurrTransMethodString).Values = []; 
    end 
+0

爲什麼'isfield(MetaSelIndPlotPARAMS.MetaLegendHandles。(CurrSelIndType)。(CurrTransMethodString)''Values')'不可接受但存在('MetaSelIndPlotPARAMS.MetaLegendHandles。(CurrSelIndType)。(CurrTransMethodString).Values')'會是? – excaza

1

您可以使用try和catch。 如果您的表達失敗,則表示您的字段丟失。

嘗試

MetaSelIndPlotPARAMS.MetaLegendHandles(CurrSelIndType)(CurrTransMethodString).Values。;

ISEXIST = TRUE;

catch err

isExist = false;