我怎么能使用数量可变的结构字段作为函数参数?

26日视图(30天)
你好,
我有一个结构,conatins处理函数和任意数量的其他变量(在本例中4),如下所示:
struct MyStruct = (“MyFun”@example,“一个”,1“b”2,“c”5,' d '37岁);
在例子是一个简单的函数,它接受一个变量数量的参数并显示它们,像这样:
函数[]=示例(变长度输入宗量)
n = 1:2:长度(变长度输入宗量)
disp ([“参数”变长度输入宗量{n}“=”num2str(变长度输入宗量{n + 1}))
结束
我想调用该函数处理(在这种情况下 @example ) 使用变量存储在MyStruct,像这样:
> > X =字段名(MyStruct)
X =
5×1细胞数组
{“MyFun”}
{“一个”}
{“b”}
{“c”}
{' d '}
> > MyStruct。MyFun (X {2}, MyStruct。(X) {2}, {3}, MyStruct。(X {3}) X {4}, MyStruct。(X {4}) X {5}, MyStruct (X {5}))。
论点一个= 1
论点b = 2
论点c = 5
论点d = 37
有方法的结构和任意数量的字段/变量?
【注:函数句柄可以指向一个函数)
例如:
> > MyStruct。MyFun (X {2}, MyStruct。(X) {2}, {3}, MyStruct。(X {3})。,X {999}, MyStruct (X {999}))。
任何帮助将不胜感激!
谢谢!

接受的答案

Stephen23
Stephen23 2020年5月21日
编辑:Stephen23 2020年5月21日
使用 struct2cell 和一个逗号分隔的列表:
> > X =字段名(MyStruct);
> > Y = struct2cell (MyStruct);
> > C = [X(2:结束),Y(2:结束)]。”;%假定函数是第一个字段!
> > MyStruct.MyFun (C {:})
论点一个= 1
论点b = 2
论点c = 5
论点d = 37
一个更健壮的解决方案是不使用位置输入参数的函数,但它写接受结构本身。
3评论

登录置评。

答案(1)

比尔Tubbs
比尔Tubbs 2023年4月5日
编辑:比尔Tubbs 2023年4月5日
我最近发现的功能 namedargs2cell (因为r2019b)和使用它的目的:
> > MyParams =结构(“一个”,1“b”2,“c”5,' d '37岁);
> > struct MyStruct = (“有趣”@example,“参数”,MyParams);
> > params = namedargs2cell (MyStruct.Params);
> > MyStruct.Fun (params {}):

类别

找到更多的在参数定义帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!