2015-10-26 30 views
0

我有一個GUI list的回調函數,該函數也從我的工作區傳入一個結構,以便在函數執行時更新/添加新值。不幸的是,當我嘗試更新/添加到結構中時,什麼也沒有發生,就像它在空間中丟失一樣。從GUI函數內更新結構句柄 - Matlab

這裏是我的回調函數:

function guiUpload(upload_button_h, evt, text_h, list_h, tracks, predictions, models) 

// various other code... 

predictions.valence(end+1) = valence; 

end 

如果我參加和我的代碼運行的腳本,而不是一個函數中也能正常工作。

回答

1

問題可能是您沒有更改對象predictions的內容,而是對象的副本。爲了更改變量predictions,您應該執行以下兩項操作之一:

a)您將變量設置爲全局變量。所以在函數內部發生的事情反映在外面。 注意:全局變量通常不是一個好習慣。

global predictions 
function guiUpload(upload_button_h, evt, text_h, list_h, tracks, models) 
// various other code... 
predictions.valence(end+1) = valence; 
end 

B)你的對象predictions是一個類的對象,所以你從handle使課堂的傳承。然後你不復制這個對象,而是給出一個像指針一樣的函數來訪問它。

沒有看到整個代碼沒有更多可以說。

+0

謝謝,可能有太多的代碼,這就是爲什麼我保持我的帖子稀疏。另一方面,選項(a)在這個時候聽起來是最實用的。您能指導我如何在我的工作空間中使我的預測結構全球化嗎? – user1574598

+0

你只是在進入函數之前創建變量global,然後你不必像參數一樣傳遞它,它將在任何地方都可以訪問(這是什麼使它成爲一個不好的解決方案) – sebas

+0

啊,我明白了,類似於'php' 。不幸的是,我現在得到這個錯誤:'錯誤:文件:guiUpload.m行:3列:1,函數定義不允許在這種情況下.'我也確保'預測'已經被' 'uicontrol'對象的callback屬性。我試着在函數內部移動'global'並得到這個錯誤:'嘗試引用非結構數組的字段。' – user1574598