Matlab:如何在类

时间:2018-05-12 20:29:18

标签: matlab

我在静态方法中有一个持久变量的类。出于测试目的,我想澄清它。 clear状态的Matlab文档:

  

要清除特定类,请使用clear myClass。

这个方向在How to clear a persistent variable in a MATLAB method

中给出

然而,这对我没用。这是一个简单的问题示例。当使用单个参数调用该方法时,假定该参数是要存储在持久变量中的矩阵。当使用两个参数调用函数时,假定它们是存储矩阵的索引引用。

class def文件 exampleClass2.m ,位于目录 @ exampleClass2

classdef exampleClass2
    methods (Static=true)
        out = foo(varargin)
    end
end

foo.m ,位于目录 @ exampleClass2

function out = foo(varargin)
    persistent persistMat;
    switch nargin
        case 1
            assert (ndims(varargin{1}) == 2)
            persistMat = varargin{1};
        case 2
            out = persistMat(varargin{1},varargin{2});
    end
end

和测试脚本

exampleClass2.foo(magic(5));
exampleClass2.foo(2,3)
  

ans = 7

clear exampleClass2
exampleClass2.foo(2,3)
  

ans = 7

我应该怎么做才能清除这个持久变量,为什么不清除类也清除持久变量?

1 个答案:

答案 0 :(得分:2)

为何清除班级名称

通常clear className没有清除持久变量的原因是因为该方法是在不同的.m文件中定义的,如class def文件中包含的方法定义所示

classdef exampleClass3
    methods (Static=true)
        function out = foo(varargin)
            persistent persistMat;
            switch nargin
                case 1
                    assert (ndims(varargin{1}) == 2)
                    persistMat = varargin{1};
                case 2
                    out = persistMat(varargin{1},varargin{2});
            end
        end
    end
end

现在测试一下

exampleClass3.foo(magic(5));
exampleClass3.foo(2,3)
  

ans = 7

clear exampleClass3
exampleClass3.foo(2,3)
  

指数超出矩阵维度。

如何在单独的.m文件中清除方法

要在单独的.m文件中定义方法时清除静态方法的持久变量,请使用clear methodName。例如,使用问题中的定义:

exampleClass2.foo(magic(5));
exampleClass2.foo(2,3)
  

ans = 7

clear foo
exampleClass2.foo(2,3)
  

指数超出矩阵维度。

如果路径包含单独的函数foo,或存在foo方法的其他类,该怎么办?

不幸的是,clear exampleClass2.foo不起作用:

exampleClass2.foo(magic(5))
clear exampleClass2.foo
exampleClass2.foo(2,3)
  

ans = 7

因此,如果路径包含函数foo,或者其他类具有foo方法,则将清除所有此类函数/方法的持久变量。