Matlab:如何在类的静态方法中清除持久变量
我有一个静态方法中带有持久变量的类。出于测试目的,我想澄清一下。Matlab:如何在类的静态方法中清除持久变量,matlab,Matlab,我有一个静态方法中带有持久变量的类。出于测试目的,我想澄清一下。clear的Matlab文档说明: 要清除特定类,请使用clear myClass 这个方向是在 然而,这对我来说并不奏效。下面是一个简单的例子。当使用单个参数调用该方法时,假定该参数是存储在持久变量中的矩阵。当使用两个参数调用函数时,假定这些参数是对存储矩阵的索引引用 class def文件exampleClass2.m位于目录@exampleClass2中 m,位于目录@exampleClass2中 还有一个测试脚本 examp
clear
的Matlab文档说明:
要清除特定类,请使用clear myClass
这个方向是在
然而,这对我来说并不奏效。下面是一个简单的例子。当使用单个参数调用该方法时,假定该参数是存储在持久变量中的矩阵。当使用两个参数调用函数时,假定这些参数是对存储矩阵的索引引用
class def
文件exampleClass2.m位于目录@exampleClass2中
m,位于目录@exampleClass2中
还有一个测试脚本
exampleClass2.foo(magic(5));
exampleClass2.foo(2,3)
exampleClass2.foo(magic(5));
exampleClass2.foo(2,3)
ans=7
ans=7
我应该怎么做才能清除这个持久变量,为什么清除类不能同时清除持久变量?为什么清除类名不起作用 通常的
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
索引超过了矩阵维度
如何在单独的.m文件中清除When方法
要在单独的.m文件中定义静态方法时清除该方法的持久变量,请使用clear methodName
。例如,使用问题中的定义:
ans=7
索引超过了矩阵维度
如果路径包含一个单独的函数foo
,或者使用foo
方法存在其他类,该怎么办?
不幸的是,clear exampleClass2.foo
不起作用:
exampleClass2.foo(magic(5))
clear exampleClass2.foo
exampleClass2.foo(2,3)
ans=7
因此,如果路径包含一个函数
foo
,或者其他类有一个foo
方法,那么所有这些函数/方法的持久变量都将被清除。如果foo
被重载,它也作为一个常规函数存在于其他类中,那么clear foo
是否会清除foo
的所有实例?这一点我真的不确定。我想可以执行清除exampleClass2.foo
@CrisLuengo,因为对静态方法的调用必须包含类的名称(例如,exampleClass2.foo
),并且一个类不能有一个方法的多个定义,我认为重载不会造成任何混淆。我更新了答案以解决您提到的其他案例。感谢您的调查!您的问题的一个简单答案是exampleClass2.foo([])
:)
exampleClass3.foo(magic(5));
exampleClass3.foo(2,3)
clear exampleClass3
exampleClass3.foo(2,3)
exampleClass2.foo(magic(5));
exampleClass2.foo(2,3)
clear foo
exampleClass2.foo(2,3)
exampleClass2.foo(magic(5))
clear exampleClass2.foo
exampleClass2.foo(2,3)