Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:如何在类的静态方法中清除持久变量_Matlab - Fatal编程技术网

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)