这是我的班级:(方向):
classdef direction
properties
up = zeros(4,5)
down = zeros(4,5)
left = zeros(4,5)
right = zeros(4,5)
end
%%%
methods
end
end
我希望能够运行一个 对于'方向'中的每个字段 做一点事 但我不知道如何使用它。
现在我正在使用
ROAD.up = ...
但我最后会想要更多的字段(16或32)
我现在尝试一个结构解决方案:
我现在正在使用
road(1).direction
等 但我觉得课堂解决方案更合适......
答案 0 :(得分:2)
我的第一个猜测是您可能对structfun
理论上它应该也适用于类 - 实际上我发现matlab类是不可预测的。
答案 1 :(得分:1)
获取properties
并循环播放它们:
d = direction
p = properties(d)
for k = 1:length(p)
prop = p{k};
d.(prop) = k
end
例如,上面的代码将以:
开头d =
direction
Properties:
up: [4x5 double]
down: [4x5 double]
left: [4x5 double]
right: [4x5 double]
并导致:
d =
direction
Properties:
up: 1
down: 2
left: 3
right: 4
如果您想自己指定列表,可以使用字符串的单元格数组并使用obj.('name')
运算符:
p = {'up', 'down', 'left', 'right'};
k = 2; % Have a loop here instead
d.(p{k}) = 5; % Set property value
答案 2 :(得分:0)
您可以滚动自己的函数,将函数应用于对象字段,与structfun
类似。
function out = objfieldfun(x, fcn)
%OBJFIELDFUN Apply a function to every field of an object
out = x;
fields = fieldnames(x);
for iX = 1:numel(x)
for iField = 1:numel(fields)
out(iX).(fields{iField}) = feval(fcn, x(iX).(fields{iField}));
end
end
然后你可以像这样使用它。
d = direction;
d2 = objfieldfun(d, @(x)x+2);
但是......通常对象的命名属性具有特定的含义和角色,并且将相同的操作应用于所有字段并不常见。也许更有意义的是将类似的属性藏在结构中,该结构本身位于对象的字段中。