Class 如何在matlab的类/结构中运行foreach字段?

Class 如何在matlab的类/结构中运行foreach字段?,class,matlab,struct,foreach,Class,Matlab,Struct,Foreach,这是我的班级:(方向): 我想能够经营一家公司 对于“方向”中的每个字段 做点什么 但我不知道如何使用它 现在我正在使用 ROAD.up=… 但我希望在末尾有更多字段(16或32) 我现在尝试一种结构解决方案: 我现在正在使用 road(1).direction 等等 但我觉得课堂解决方案更正确 我的第一个猜测是你可能对 理论上,它也应该适用于类-实际上,我发现matlab类不可预测。我的第一个猜测是,您可能对 理论上,它也应该与类一起工作-实际上,我发现matlab类是不可预测的。获取属性并

这是我的班级:(方向):

我想能够经营一家公司 对于“方向”中的每个字段 做点什么 但我不知道如何使用它

现在我正在使用
ROAD.up=…
但我希望在末尾有更多字段(16或32)

我现在尝试一种结构解决方案:
我现在正在使用

road(1).direction
等等
但我觉得课堂解决方案更正确

我的第一个猜测是你可能对


理论上,它也应该适用于类-实际上,我发现matlab类不可预测。

我的第一个猜测是,您可能对


理论上,它也应该与类一起工作-实际上,我发现matlab类是不可预测的。

获取
属性
并循环它们:

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

获取
属性
并在其上循环:

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

您可以滚动您自己的函数,将函数应用于对象字段,这对
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);

但是。。。通常,对象的命名属性具有特定的含义和角色,对所有字段应用相同的操作是不常见的。也许将类似的属性隐藏在结构中会更有意义,而结构本身位于对象的字段中。

您可以滚动自己的函数,将函数应用于对象字段,这对
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);

但是。。。通常,对象的命名属性具有特定的含义和角色,对所有字段应用相同的操作是不常见的。也许将类似的属性隐藏在结构中会更有意义,而结构本身就在对象的字段中。

你能详细说明一下你打算做什么吗?特别是-您的问题是在所有属性上循环还是在一个属性的数组上循环?您能详细说明您计划做什么吗?特别是-您的问题是在所有属性上循环还是在一个属性的数组上循环?我希望
structfun
可以工作,只要
fieldnames
返回您感兴趣的属性。它不会工作
Structfun
需要一个实际的结构,如果您向它传递一个对象,它将出错。我希望
Structfun
能够工作,只要
fieldnames
返回您感兴趣的属性。它不会工作
Structfun
需要一个实际的结构,如果您向它传递一个对象,它将出错。太棒了!谢谢我会小心的,太好了!谢谢我会查清楚的