Given a named function, how can I call this function, and not the subfunction of the same name?
    6 views (last 30 days)
  
       Show older comments
    
    Oliver Woodford
      
 on 29 May 2015
  
    
    
    
    
    Commented: Oliver Woodford
      
 on 30 May 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');
Accepted Answer
  Titus Edelhofer
    
 on 29 May 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 Comments
More Answers (2)
  Philip Borghesani
    
      
 on 29 May 2015
        
      Edited: Philip Borghesani
    
      
 on 29 May 2015
  
      There is a much simpler solution to this:
 function fh=test
    fh=str2func('@(x) help(x)');
    fh('help')
 end
 ...
  Titus Edelhofer
    
 on 29 May 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 Comments
  Alfonso Nieto-Castanon
      
 on 29 May 2015
				
      Edited: Alfonso Nieto-Castanon
      
 on 29 May 2015
  
			couldn't you use:
 feval(evalin('base','@(varargin) help(varargin{:})'),'help')
to account for variable number of inputs?
See Also
Categories
				Find more on Startup and Shutdown 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!


