how to write variables in a functions workspace by assignin
Mostra commenti meno recenti
Hello,
I would like to create annotation objects in a functions local workspace, where object names are created in a loop.
here is how I would like to code to look:
x_ini = 0.27;
for k=1:6
dummy = annotation(f,'textbox','EdgeColor', 'white', ...
'String',mycell(:,k),'Position',[x_ini 0.34 0.11 0.15],...
'BackgroundColor','white','Visible','on');
x_ini = x_ini+ 0.08;
assignin('??ws??',['h_ann_' num2str(k)], dummy)
end
When I use eval, this error pops: attempt to write a variable to a static workspace.
With evalin or assingin, I cannot find how to name the functions local workspace. opening up the loop works, however it is ugly: h_ann1 = ... h_ann2 = ...
Thanks in advance, Muge
1 Commento
Muthu Annamalai
il 23 Feb 2013
Alternatively, you may want to create a static object like 'containers.Map' and store the string-value associations.
Risposta accettata
Più risposte (3)
Alexandre Laurin
il 23 Feb 2013
Modificato: Alexandre Laurin
il 23 Feb 2013
2 voti
assignin('caller',['h_ann_' num2str(k)], dummy)
will work unless you are calling this function from another function (or script), in which case the problem is a little deeper.
Also, you might want to have a look at structures with dynamic field names, I'm pretty sure they'll do what you want to do with more elegance.
Jan
il 11 Gen 2014
Hiding an index in the name of a variable is a bad idea. It is complicated, as you see already, and requires equivalently complicated method to access these variables later on.
Better use an index as index:
h_ann = cell(1, 6);
for k=1:6
...
h_ann{k} = dummy;
end
Azzi Abdelmalek
il 4 Feb 2013
Modificato: Azzi Abdelmalek
il 4 Feb 2013
dummy=20
k=3;
assignin('base',sprintf('h_ann%d',k),dummy)
1 Commento
Muge Erinc
il 4 Feb 2013
Categorie
Scopri di più su Construct and Work with Object Arrays in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!