【MATLAB App Designer】关于确认app中是否存在某变量时出错的问题分析与改进(isfie
背景
已经声明了inData,然后在inData的基础上采用struct结构进行赋值,用于存储变量,如app.inData.SensorsData,

需求
app变量已经确认存在,现在程序运行需要确认app.inData.SensorsData是否存在,如果不存在将对该变量重新赋值,
之前一直是采用“isfield( app , 'inData' ) == 1 && isfield( app.inData , 'SensorsData' ) == 1”来进行判断,现在发现这样的写法有问题;
在app.inData.SensorsData存在的情况下,采用*.mlapp返回的结果是false,而采用*.m编写的则返回true

原因分析
在*.m也就是脚本中,app.inData 是结构体(struct),但在*.mlapp中为非机构体,故isfield失效,如下图:


*.mlapp中对app采用isfield无效
具体原因不清楚,所以对于判断条件“isfield(app,'inData') == 1 && isfield( app.inData , 'SensorsData') == 1”已经不适用了,需要进一步改进

改进方式
通过测试,fieldnames 函数在非结构体的app中仍适用,如下图:

故判断inData是否存在的函数可以改写为如下:

总结
采用“max( ismember( fieldnames( app ) , 'inData' ) ) && isfield( app.inData , 'SensorsData' ) == 1”即可完成优化
