2016-12-15 70 views
1

我想在不使用MATLAB內的全局變量的情況下從回調中接收數據。這不是用於GUI編程,而是用於使用rossubscriber。我曾嘗試以下:從回調中獲取數據

function [mySub] = myFunction(cloudTopic) 
    testHandle.a = 0; 
    mySub = rossubscriber(cloudTopic,{@mySub_CB,testHandle}, 'BufferSize', 30); 
end 

function mySub_CB(src, msg, objHandle) 
objHandle.a = objHandle.a + 1 
end 

,因爲我讀這在Mathworks公司文檔

注:還有其他的方法可以從回調提取信息 功能除了使用全局變量。例如,可以將對象 作爲附加參數傳遞給回調函數。有關定義 回調函數的更多信息,請參閱 回叫定義文檔。

不幸的是,這不起作用。 testHandle沒有被更新,並且不斷顯示1。如何做到這一點? :)

回答

1

問題是因爲testHandle是一個struct一個handle object,不像handle對象,structs是按值傳遞而不是按引用。

可能是你最簡單的辦法是使mySub_CBmyFunction一個子功能,然後可以在myFunction

function [mySub] = myFunction(cloudTopic) 
    testHandle.a = 0; 
    mySub = rossubscriber(cloudTopic, @mySub_CB, 'BufferSize', 30); 

    function mySub_CB(src, msg) 
     testHandle.a = testHandle.a + 1 
    end 

end 
工作區訪問和修改變量