想象一下以下结构:
A.B1 = 1:42;
A.B2 = 'Hello World!'
现在我想做一些操作,但是备份新子结构中的现有数据。
A.B1.C1 = A.B1;
A.B1.C2 = mean(A.B1.C1);
这两行(作为示例)我想放入一个函数,所以我的脚本看起来如下:
A.B1 = 1:42;
A.B2 = 'Hello World!'
myfunction(A.B1)
我的工作区应该看起来像:
A =
B1: [1x1 struct]
B2: 'Hello World!'
A.B1 =
C1: [1x42 double]
C2: 21.5
但是我无法以这种方式创建该函数,我的原始结构A
不会被破坏。除此之外,我的功能输入可能是W.X.Y
,之后我想获得W.X.Y.Z1
和W.X.Y.Z2
。它也可以是一个简单的向量A = 1:42
,之后应该是A.B1
和A.B2
。
有任何建议吗?
我可以使用fieldnames
和assignin('base',...)
制作一些丑陋的东西 - 但这真的是要走的路吗?
编辑:一个主要问题是函数inputname
不适用于结构。因此,如果我将A
传递给我的函数,我可以使用fieldnames
来获取B1
和B2
的名称,但我无法找到什么是最初的字段名称" A
"。如果A
在我的函数中变为inputname(1)
,则返回 'A'
。对于结构,输出为空。
类和方法是解决方案吗?不幸的是,我根本不熟悉OOP ......
答案 0 :(得分:3)
我唯一能看到的就是:
function [out] = myfunction(in)
out.base = in;
out.compute = mean(in);
end
当你想使用你的功能时,你必须提供相同的输入/输出变量:
A.B1 = 1:42;
A.B2 = 'Hello World!'
A.B1 = myfunction(A.B1);
也可以进行多项输入:
function [varargout] = myfunction(varargin)
for ii = 1:nargin
out.base = varargin{ii};
out.compute = mean(out.base);
varargout{ii} = out;
end
end
只要输出变量的符号与其相应的输入变量相同:
W.X.Y1 = 1:42;
W.X.Y2 = 'Hello world!';
A.B1 = 100:-1:0;
A.B2 = 'Goodbye cruel world!'
[W.X.Y1,A.B1] = myfunction(W.X.Y1,A.B1)