Тук има два основни варианта. Можете да използвате assignin
в вашата функция, за да запазите данните в основното работно пространство.
function main
S.tm = [];
S.cnt = 0;
S.fh = figure('KeyPressFcn',@youPressedSomething,...
'menu','none',...
'pos',[400 400 320 50]);
S.th = uicontrol('Style','text','Position',[10 10 300 30],...
'String','You have not hit space yet');
function youPressedSomething(varargin)
if strcmp(varargin{2}.Character,' ')
S.tm = [S.tm now]
S.cnt = S.cnt + 1;
set(S.th,'str',sprintf('You hit space %i!',S.cnt));
%// Save as "timestamps" in the base workspace
assignin('base', 'timestamps', S.tm);
end
end
end
Или по-добър подход би бил да използвате waitfor
за блокиране на изпълнението на функцията докато фигурата се затвори. След това можете да върнете S.tm
точно като нормален изходен аргумент
function timestamps = main()
S.tm = [];
S.cnt = 0;
S.fh = figure('KeyPressFcn',@youPressedSomething,...
'menu','none',...
'pos',[400 400 320 50]);
S.th = uicontrol('Style','text','Position',[10 10 300 30],...
'String','You have not hit space yet');
%// Wait until the figure is closed
waitfor(S.fh);
%// Save S.tm as timestamps and return
timestamps = S.tm;
function youPressedSomething(varargin)
if strcmp(varargin{2}.Character,' ')
S.tm = [S.tm now]
S.cnt = S.cnt + 1;
set(S.th,'str',sprintf('You hit space %i!',S.cnt));
%// Save as "timestamps" in the base workspace
assignin('base', 'timestamps', S.tm);
end
end
end
person
Suever
schedule
02.05.2016
main
function приключи? Мисля, че човек трябва да създаде манипулатор в работното пространство, да го прехвърли наmain
и след това наyPS
, за да бъде актуализиран. - person Crowley   schedule 02.05.2016