我在 Matlab 2009a 上尝试了你的例子(早在新的 HG2 之前),行为与你描述的完全一样。
classes
看来您在 Matlab 中的工作方式略有错误。
基本上,您可以使用任何类型的数字/文本值分配属性的默认值:
properties
myProp %// No default value assigned
myProp = 'some text';
myProp = sin(pi/12); %// Expression returns default value
end
但不要给它们分配一个句柄
myProp1 = figure ; %// all the object of this class will always point to this same figure
myProp2 = plot([0 1]) ; %// all the object of this class will always point to this same line object
否则,您的类的所有对象(甚至是新创建的)都将指向相同的实际句柄,该句柄仅在您的第一个对象被实例化时创建一次。
如果要在每次创建类的新对象时生成不同的图形对象(图),则必须在类构造函数中生成它。
所以你的班级变成:
classdef mytestclass
properties (SetAccess = private) %// you might not want anybody else to modify it
hFig
end
methods
function obj = mytestclass()
obj.hFig = handle( figure ) ; %// optional. The 'handle' instruction get the actual handle instead of a numeric value representing it.
end
end
end
从帮助:
将属性初始化为唯一值
MATLAB 仅在加载类定义时将属性分配给指定的默认值一次。因此,如果您
使用句柄类构造函数初始化属性值,MATLAB 只会调用此构造函数一次,并且每个实例都引用同一个句柄对象。如果您希望每次创建对象时将属性值初始化为句柄对象的新实例,请在构造函数中分配属性值。