2015-10-14 63 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;