How do I use the who command within a function

13 views (last 30 days)
I am trying to use the who command within a function to make a list of the variables in the current workspace that match a given string.
Here is my little test function to get this portion working. In my case there are 6 variables that match the string so test should return "6". However, I always get 0. If I comment out the function line and run it as a script, it works fine. Is there a way to get the who command within a function to generate a list of variables from the current workspace?
function[test] = myfun()
%dev = 'R_A_bot';
%keys = strcat('IV','*',dev,'*');
vars = who ('IV*R_A_bot*');
test = length(vars);
Thank you.

Accepted Answer

Matt Fig
Matt Fig on 7 Sep 2012
Edited: Matt Fig on 7 Sep 2012
When a function is running, the current workspace is the workspace of the function. That is just how it works.
Why not just keep it as a script?
If you must have a function for some reason, you can use this line, with either 'caller' or 'base' depending.
vars = evalin('caller','who (''IV*R_A_bot*'')');
  1 Comment
Becca
Becca on 7 Sep 2012
Thank you, that worked.
That was just a snippet of code I wrote trying to solve the problem. I have several different scripts that I change a little here, a little there for each run. I am making each a function so I can choose which "scripts" to call and only have to change one thing and pass it through.
For example, in that one I will eventually pass in dev and assemble "keys" to use as the expression in who. Dev could be passed into say the 4 functions I run on that dataset.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!