【MATLAB App Designer】關(guān)于確認app中是否存在某變量時出錯的問題分析與改進(isfie
背景
? ?已經(jīng)聲明了inData,然后在inData的基礎(chǔ)上采用struct結(jié)構(gòu)進行賦值,用于存儲變量,如app.inData.SensorsData,

需求
? ?app變量已經(jīng)確認存在,現(xiàn)在程序運行需要確認app.inData.SensorsData是否存在,如果不存在將對該變量重新賦值,
之前一直是采用“isfield( app , 'inData' )? ==? 1 && isfield( app.inData , 'SensorsData' )? == 1”來進行判斷,現(xiàn)在發(fā)現(xiàn)這樣的寫法有問題;
? ?在app.inData.SensorsData存在的情況下,采用*.mlapp返回的結(jié)果是false,而采用*.m編寫的則返回true

原因分析
? ?在*.m也就是腳本中,app.inData 是結(jié)構(gòu)體(struct),但在*.mlapp中為非機構(gòu)體,故isfield失效,如下圖:


*.mlapp中對app采用isfield無效
? ?具體原因不清楚,所以對于判斷條件“isfield(app,'inData') == 1 && isfield( app.inData , 'SensorsData') == 1”已經(jīng)不適用了,需要進一步改進

改進方式
? ?通過測試,fieldnames 函數(shù)在非結(jié)構(gòu)體的app中仍適用,如下圖:

? ?故判斷inData是否存在的函數(shù)可以改寫為如下:

總結(jié)
? ?采用“max( ismember( fieldnames( app ) , 'inData' ) )? && isfield( app.inData , 'SensorsData' )? ==? 1”即可完成優(yōu)化
