"处理删除的数字"错误 - Matlab hg2 - 在类中存储图形句柄

时间:2014-11-15 05:48:13

标签: matlab matlab-figure matlab-hg2

我有一个存储图形句柄的类。使用新的Matlab处理图形hg2,我得到一个删除数字"的句柄。错误。

classdef mytestclass
    properties
        hFig = figure
    end
end

只创建一个类的实例工作正常,我将a.hFig作为有效的数字句柄。

a = mytestclass % this will open the figure

但是当我关闭图形并创建该类的另一个实例时,我得到了

b = mytestclass % this won't open any figure
b.hFig % this is now a handle to a deleted figure

我做错了课吗?或者这是一个错误吗?

1 个答案:

答案 0 :(得分:1)

我在Matlab 2009a上尝试了你的例子(早在新的HG2之前)并且行为与你描述的完全相同。

似乎你在使用Matlab中classes的工作方式做了一些错误。

基本上,您可以使用任何类型的数值/文本值指定属性的默认值:

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

否则你的类的所有对象(甚至是新创建的)都将指向在实例化第一个对象时仅创建一次的相同实际句柄。

如果要在每次创建类的新对象时生成不同的图形对象( figure ),则必须在类构造函数中生成它。

所以你的班级成为:

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仅将属性分配给指定的默认值一次   加载类定义时。因此,如果你初始化一个   带有 handle-class构造函数属性值,MATLAB将其调用   构造函数只有一次,每个实例引用相同的句柄   宾语。如果要将属性值初始化为新值   每次创建一个对象时,一个句柄对象的实例,分配   构造函数中的属性值。