Search code examples
matlabanonymous-functionhandlevariadic-functions

Anonymous functions with varargin


I have a function that takes 3 mandatory inputs and 1 optional:

 f(A, B, C, X)

I want to use an anonymous function in this way

h = @(X)f(A,B,C,X)

where A, B, C have already been defined, so that I can just call h(1) and the code runs f(A,B,C,1), as well as h() to run f(A,B,C). The only way I am able to do it (correct me if I am wrong) is using varargin. I define

f(A,B,C,varargin)

and use

h = @(varargin)f(A,B,C,varargin)

The problem is that when I call directly f(A,B,C,1), then inside the function I have varargin = {1}. If I call h(1), then I have varargin = {{1}}. How can I avoid that? Is there a better way to implement what I want?


Solution

  • You need to (or, rather, it may be best to) expand varargin into a comma-separated list with your current implementation:

    h = @(varargin)f(A,B,C,varargin{:})
    

    The question of if there is a better way is dependent on the specifics of the problem.