在matlab中设置对象数组的对象属性值

时间:2013-06-14 15:43:20

标签: arrays matlab object properties

我创建了一个对象数组,我希望在不使用for循环的情况下在向量操作中分配属性值。不幸的是我收到了错误。

问题的简化示例。

classdef clsMyClass < handle
   properties 
      dblMyProperty1
   end 
   methods
        function obj = clsMyClass()
        end      
   end
end 

运行时

vecMyArray = clsMyClass.empty(100,0);
vecMyArray(100) = clsMyClass;    
vecMyArray.dblMyProperty1 = 1:100;    

我们收到以下错误:

???点名称中右侧元素的数量不正确 分配。左手边缺少[]可能是原因。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

您可以将deal功能用于此目的:

[vecMyArray.dblMyProperty1] = deal(1:100);

请参阅:http://www.mathworks.com/company/newsletters/articles/whats-the-big-deal.html


编辑:不,你不能,实际上;将它们设置为1:100的矢量。

答案 1 :(得分:1)

我看到你现在要做的事情。使用MATLAB文件交换中的disperse

>> [vecMyArray.dblMyProperty1] = disperse(1:100);
>> vecMyArray(1).dblMyProperty1
ans = 
    1
>> vecMyArray(10).dblMyProperty1
ans = 
    10

答案 2 :(得分:0)

我想你会在“结构数组错误”中找到答案here。即使这是一个类,也适用类似的规则。

  

不幸的是,缺少[]不是原因,因为添加它们会导致更多错误。原因是您不能一次为同名的所有字段分配相同的值,您必须一次一个地执行,如下面的代码所示:

所以你需要:

for ii=1:100
  vecMyArray(ii).dblMyProperty1 = ii;
end

我知道这并不令人满意,但我认为这至少有助于我们明确地理解这个错误。