Given a named function, how can I call this function, and not the subfunction of the same name?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Oliver Woodford
le 29 Mai 2015
Commenté : Oliver Woodford
le 30 Mai 2015
My function is passed the name of a function (as a string). It just so happens that my function contains a subfunction of that name. I want to make sure I call the external function, instead of the subfunction. How can I achieve this?
E.g. save the following in test.m:
function test
feval(evalin('base', 'str2func(''help'')'), 'help');
end
function varargout = help(varargin)
error('Should not get here!');
[varargout{1:nargout}] = deal([]);
end
Then calling test gives:
>> test
Error using test>help (line 6)
Should not get here!
Error in test (line 2)
feval(evalin('base', 'str2func(''help'')'), 'help');
Réponse acceptée
Titus Edelhofer
le 29 Mai 2015
Oliver,
what about this:
feval(evalin('base', '@(x) help(x)'), 'help')
This works fine. And as you noted yourself, using {:} you can expand the input variable as cell array.
Titus
0 commentaires
Plus de réponses (2)
Philip Borghesani
le 29 Mai 2015
Modifié(e) : Philip Borghesani
le 29 Mai 2015
There is a much simpler solution to this:
function fh=test
fh=str2func('@(x) help(x)');
fh('help')
end
...
Titus Edelhofer
le 29 Mai 2015
Hi Oliver,
although this is not an answer to your question it might help anyway: this is one of the reasons to use function handles instead of strings denoting functions. The big advantage of a function handle is, that the function is determined in the moment the function handle in contrast to strings, where in the moment of evaluation the dispatching happens.
If you pass @help instead of 'help' to your function as input, you are sure, that the correct function is used.
Titus
5 commentaires
Oliver Woodford
le 29 Mai 2015
Modifié(e) : Oliver Woodford
le 29 Mai 2015
Alfonso Nieto-Castanon
le 29 Mai 2015
Modifié(e) : Alfonso Nieto-Castanon
le 29 Mai 2015
couldn't you use:
feval(evalin('base','@(varargin) help(varargin{:})'),'help')
to account for variable number of inputs?
Voir également
Catégories
En savoir plus sur Startup and Shutdown dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!