3

我创建了一个对象数组,我想在向量操作中分配一个属性值,而不使用 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;    

我们收到以下错误:

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

任何帮助,将不胜感激。

4

3 回答 3

1

You can use the deal function for exactly this purpose:

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

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


Edit: No you can't, actually; that'll set them to all be the vector 1:100.

于 2013-06-14T17:46:08.780 回答
1

我明白你现在想做什么。disperse从 MATLAB File Exchange使用:

>> [vecMyArray.dblMyProperty1] = disperse(1:100);
>> vecMyArray(1).dblMyProperty1
ans = 
    1
>> vecMyArray(10).dblMyProperty1
ans = 
    10
于 2013-06-14T21:16:18.183 回答
0

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

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

所以你需要:

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

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

于 2013-06-14T17:22:25.580 回答