Struct with scope of multiple functions does not update in a nested function
4 views (last 30 days)
Show older comments
I have a structure that i update when a button is pressed in a gui like so:
S is the structure containing the gui S.struct is an existing struct
function []=callbackfun(varargin)
S=varargin{3};
editInfo=get(s.edit,'string'); %Get information from an text box
popInfo=get(s.pop,{'string','value'}) %Get info from a pop up
S.struct.(editInfo)=popInfo;
%I also add the variable popInfo to a another Popup, which i call here anotherPop
end
This updates the structure no problem within the function, but when I try to reference this in another callback function later, which looks like
function []=anothercall(varargin)
S=varargin{3}
val=get(S.anotherPop,{'string','value});
fieldName=val{1}{val{2}};
miscVar=getfield(S.struct,fieldName);
I have no other mention of S.struct, except when i initialize it at the very beginning of the function (even if i comment this out, i get the same problem) Yet, when i reach anothercall, S.struct.(editInfo) no longer exists.
Does anyone have any advice
0 Comments
Answers (1)
TADA
on 5 Nov 2018
Edited: TADA
on 5 Nov 2018
I may be a little bit too late for the party but...
structures are value types, unlike handle classes, when you edit a struct inside a function it generates a copy of the original in the function workspace, therefore not affecting the original instance in the calling workspace.
it can get quite annoying but you need to either return it to the caller as an output argument, or save it as a property of a handle class passed to the function.
look at these two functions:
function foo(s)
s.x = 1:10;
end
function s = foo1(s)
s.x = 1:10;
end
now when invoking :
s = struct();
s.x = [];
foo(s);
disp(s.x); % nothing happened
x: []
foo1(s);
disp(s.x); % surprisingly, again nothing happened
x: []
% This is when the value of the struct edited by foo1
% is set back into the local workspace
s = foo1(s);
disp(s.x); % finally! s is updated.
x: [1 2 3 4 5 6 7 8 9 10]
0 Comments
See Also
Categories
Find more on Structures in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!