Matlab oop 的意外初始 属性 值
Unexpected initial property value with Matlab oop
我定义了一个名为 MySettings
的简单 class,它在内部适用于在名为 MySubSettings
:
的 class 中定义的其他设置
%% --- Definition for MySubSettings
classdef MySubSettings < handle
properties
Fifi = 666;
end
end
%% --- Definition for MySettings
classdef MySettings < handle
properties
Riri = 42;
Subs = MySubSettings();
end
end
第一次用s = MySettings();
实例化MySettings
一切正常(属性Riri
初始化为42
而Subs
是MySubSettings
的实例 属性 Fifi
初始化为 666
) ...到目前为止一切顺利 ...
现在,如果我修改 属性 值并将 s
重新分配给新实例,如下所示:
s.Riri = 0;
s.Subs.Fifi = 0;
s = MySettings();
然后检查新 s
实例中属性的新值...我有 s.Riri
等于 42
(如预期) ...但是 s.Subs.Fifi
仍然等于 0
我希望它被重新初始化为 666
(???)
为什么只初始化了Riri
?我做错了什么还是错误?
注意:我遇到了 R2013b 和 R2014b 的问题。
我的误会...
在 class 定义中分配给属性的值不是 初始值 (例如在 C# 中)而是 默认值 并且在 class 首次使用后不再重新评估。
在我的示例中,由于 MySubSettings
是句柄 class,分配给它的任何值都将成为下一个实例的新默认值。
这个默认值的概念有点混乱……不过好吧,这是我的错误……抱歉。
我定义了一个名为 MySettings
的简单 class,它在内部适用于在名为 MySubSettings
:
%% --- Definition for MySubSettings
classdef MySubSettings < handle
properties
Fifi = 666;
end
end
%% --- Definition for MySettings
classdef MySettings < handle
properties
Riri = 42;
Subs = MySubSettings();
end
end
第一次用s = MySettings();
实例化MySettings
一切正常(属性Riri
初始化为42
而Subs
是MySubSettings
的实例 属性 Fifi
初始化为 666
) ...到目前为止一切顺利 ...
现在,如果我修改 属性 值并将 s
重新分配给新实例,如下所示:
s.Riri = 0;
s.Subs.Fifi = 0;
s = MySettings();
然后检查新 s
实例中属性的新值...我有 s.Riri
等于 42
(如预期) ...但是 s.Subs.Fifi
仍然等于 0
我希望它被重新初始化为 666
(???)
为什么只初始化了Riri
?我做错了什么还是错误?
注意:我遇到了 R2013b 和 R2014b 的问题。
我的误会...
在 class 定义中分配给属性的值不是 初始值 (例如在 C# 中)而是 默认值 并且在 class 首次使用后不再重新评估。
在我的示例中,由于 MySubSettings
是句柄 class,分配给它的任何值都将成为下一个实例的新默认值。
这个默认值的概念有点混乱……不过好吧,这是我的错误……抱歉。