欢迎光临散文网 会员登陆 & 注册

【MATLAB App Designer】关于确认app中是否存在某变量时出错的问题分析与改进(isfie

2021-10-11 10:42 作者:-何其-  | 我要投稿

背景

   已经声明了inData,然后在inData的基础上采用struct结构进行赋值,用于存储变量,如app.inData.SensorsData,

app.inData.SensorsData包含的内容

需求

   app变量已经确认存在,现在程序运行需要确认app.inData.SensorsData是否存在,如果不存在将对该变量重新赋值,

之前一直是采用“isfield( app , 'inData' )  ==  1 && isfield( app.inData , 'SensorsData' )  == 1”来进行判断,现在发现这样的写法有问题;

   在app.inData.SensorsData存在的情况下,采用*.mlapp返回的结果是false,而采用*.m编写的则返回true


*.mlapp返回的结果是false

原因分析

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

*.mlapp中为非strut体

*.mlapp中对app采用isfield无效

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

app.inData这里设定为结构体

改进方式

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

fieldnames运算效果

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

fieldnames

总结

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

优化效果


【MATLAB App Designer】关于确认app中是否存在某变量时出错的问题分析与改进(isfie的评论 (共 条)

分享到微博请遵守国家法律