具有可变长度参数列表的匿名函数

12

我能否创建一个接受可变数量参数的匿名函数?

我有一个结构体数组 S,其中有一个字段,比如说bar,我想将所有bar的值传递给我的匿名函数foo。由于结构体S中的元素数量未知,foo必须能够接受可变数量的参数。

我能想到的最接近的方法是将一个单元格数组作为输入参数列表进行传递:

foo({arg1, arg2, arg3, ...})

我用foo({S.bar})来调用它,但这看起来非常别扭。

专门为此创建一个特殊的m文件似乎有些过头了。还有其他想法吗?

2个回答

10
varargin作为匿名函数参数,可以传递可变数量的输入。

例如:

foo = @(varargin)fprintf('you provided %i arguments\n',length(varargin))

使用方法

s(1:4) = struct('bar',1);
foo(s.bar)

you provided 4 arguments

我没有意识到varargin可以用在匿名函数中,而答案就在我的眼前:) 就此而言,您可以使用nargin代替length(varargin) :) - Eitan T
@EitanT:我知道我可以使用nargin,但我想要一些简单的操作来使用varargin - Jonas

0
  • 在 matlab 中,va_arg 被称为 varargin,以下是链接内容:

varargin 是函数定义语句中的一个输入变量,它允许函数接受任意数量的输入参数。

function varlist(varargin)
   fprintf('Number of arguments: %d\n',nargin);
   celldisp(varargin)

varlist(ones(3),'some text',pi)


Number of arguments: 3

varargin{1} =
     1     1     1
     1     1     1
     1     1     1

varargin{2} =
some text

varargin{3} =
    3.1416

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接