我在静态方法中有一个持久变量的类。出于测试目的,我想澄清它。 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
我应该怎么做才能清除这个持久变量,为什么不清除类也清除持久变量?
答案 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
方法,则将清除所有此类函数/方法的持久变量。