【发布时间】:2014-11-04 10:23:49
【问题描述】:
我寻找了几天的解决方案,但我被困住了。 我有一个简单的对象类:
classdef GRIDCELL < handle
properties
rho
end
methods
%% Constructor
function obj = GRIDCELL(rho)
if nargin ~= 0 % Allow nargin == 0 syntax
obj.rho = rho;
end
end
end
end
例如,我用
创建我的对象G(1:3) = GRIDCELL(2)
现在,我想更新所有单元格中的值 rho。但不幸的是,这不起作用
C = {11 22 33};
[G(1:3).rho] = C{:};
如果我现在证明这一点,所有值都只会被 C 中的 LAST 值覆盖。我真的不明白 :(
G(1:3).rho
ans =
33
ans =
33
ans =
33
内置交易的结果相同。拜托,我搜索了一种简单快捷的方法来做到这一点,没有像“num2cell”这样的循环或类似的东西。
【问题讨论】:
-
我没有测试你的类代码,但如果你不使用它,那么它会按预期分发值或
C。但是我有一种预感,也许问题是您的类正在创建对同一个对象的多个引用,因此,如果您为其中任何一个分配一个值,您就是将该值分配给所有这些引用,因为它们实际上都只是引用相同的记忆。 -
也许试试
for i = 1:3 G(i) = GRIDCELL(2); end看看是否还有同样的效果? -
好的,这适用于这种情况:)。但是我在我的真实模型中有一个对象数组,例如,我使用
for i = 1:3 G(i,2) = GRIDCELL(2); end创建第二列。在这种情况下,所有值都被 C ^^ 的第一个值覆盖。这有点好笑-.-。我认为,它又是多个参考。我怎么能改变这个,我应该改变我的类构造函数吗? -
我无法想象为什么
G(i,2)与G(i)有任何不同...除非您可能必须首先初始化G?在循环之前尝试G = zeros(3, 2)? -
我现在用
for i = 1:3 for j = 1:3 G(i,j) = GRIDCELL(2); end end试了一下。这现在有效。所以这是一个选项,我必须一个接一个地创建对象。但还有其他可能吗?