2016-12-15 2 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 

, потому что я прочитал это на The MathWorks документации

Примечание: Есть другие способы извлечения информации из обратного вызова функции помимо использования глобал. Например, вы можете передать объект в качестве дополнительного аргумента функции обратного вызова. Дополнительную информацию об определении функций обратного вызова см. В документации по определению обратного вызова 10.

К сожалению, это изделие не работает. testHandle не обновляется и 1 постоянно отображается. Как это сделать правильно? :)

ответ

1

Проблема в том, что testHandle является structнеhandle object и в отличие от handle объектов, structs передаются по значению а не по ссылке.

Вероятно, ваш самый простой вариант был бы сделать mySub_CBподфункции из myFunction, а затем он может получить доступ и изменять переменные в рабочем пространстве 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 
Смежные вопросы