我创建了一个对象数组,我希望在不使用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;
我们收到以下错误:
???点名称中右侧元素的数量不正确 分配。左手边缺少[]可能是原因。
任何帮助都将不胜感激。
答案 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
我知道这并不令人满意,但我认为这至少有助于我们明确地理解这个错误。