How can I run publish() in a workspace other than base?

3 views (last 30 days)
I'm using the publish() function to build up an automated reporting process. BUT, whenever I call publish() from within a function, it attempts to execute its target in the MATLAB base workspace, not the workspace of the present function. The following code generates an error:
function callingFunction()
a = 10;
publish(myReportingScript)
where myReportingScript.m contains:
disp(a)
If there is no variable a in MATLAB's base workspace, this simply doesn't work. Surely publish() should be executing in the workspace of its caller, not always the base workspace??? How can I get around this?
[Note: I also tried converting my script to a function and calling with:
function callingFunction()
a = 10;
options.codeToEvaluate = 'myReportingFcn(a)'
publish(myReportingFcn)
... but that doesn't work either.
  1 Comment
Tom Clark
Tom Clark on 4 Dec 2015
Not a full answer, but I developed a workaround which adds the requisite variables to the base workspace then deletes them after publishing.
Requires:
- putvar(), on the FEX, from John d'Ericco (John saves me yet again!)
- care that this doesn't overwrite then delete similarly named variables in that workspace.
options.codeToEvaluate = 'myReportingFcn(a)';
putvar(a)
publish('trainFoilReport.m',options)
evalin('base','clearvars a')

Sign in to comment.

Answers (0)

Categories

Find more on Variables 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!