Given a named function, how can I call this function, and not the subfunction of the same name?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Oliver Woodford
el 29 de Mayo de 2015
Comentada: Oliver Woodford
el 30 de Mayo de 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');
Respuesta aceptada
Titus Edelhofer
el 29 de Mayo de 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 comentarios
Más respuestas (2)
Philip Borghesani
el 29 de Mayo de 2015
Editada: Philip Borghesani
el 29 de Mayo de 2015
There is a much simpler solution to this:
function fh=test
fh=str2func('@(x) help(x)');
fh('help')
end
...
Titus Edelhofer
el 29 de Mayo de 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 comentarios
Oliver Woodford
el 29 de Mayo de 2015
Editada: Oliver Woodford
el 29 de Mayo de 2015
Alfonso Nieto-Castanon
el 29 de Mayo de 2015
Editada: Alfonso Nieto-Castanon
el 29 de Mayo de 2015
couldn't you use:
feval(evalin('base','@(varargin) help(varargin{:})'),'help')
to account for variable number of inputs?
Ver también
Categorías
Más información sobre Startup and Shutdown en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!