Oop 如何让MATLAB识别新添加的静态方法?

Oop 如何让MATLAB识别新添加的静态方法?,oop,matlab,function,scope,Oop,Matlab,Function,Scope,我使用类和静态方法在命名空间中“作用域”函数,类似于C#。但是,每次我向类添加新方法时,首先都找不到它。我必须重新启动MATLAB环境(2007a),以便识别新方法 当然,我可以使用“update”或“refresh”类型的命令,这样我就不必在每次添加函数时重新启动MATLAB环境了?发出此调用即可: clear classes 这样做的一个不幸的副作用是,它还有效地发出一个“全部清除”(clear all)命令,该命令也会清除工作区中的所有变量(但是,在关闭并重新启动MATLAB时,无论如何

我使用类和静态方法在命名空间中“作用域”函数,类似于C#。但是,每次我向类添加新方法时,首先都找不到它。我必须重新启动MATLAB环境(2007a),以便识别新方法

当然,我可以使用“update”或“refresh”类型的命令,这样我就不必在每次添加函数时重新启动MATLAB环境了?

发出此调用即可:

clear classes
这样做的一个不幸的副作用是,它还有效地发出一个“全部清除”(clear all)命令,该命令也会清除工作区中的所有变量(但是,在关闭并重新启动MATLAB时,无论如何都会发生这种情况)。清除工作区实际上是有目的的,因为它将删除与旧版本的类相同类型的任何变量,而旧版本的类可能无法正确使用新版本的类


该函数可能会起作用,但我对此表示怀疑(我认为它处理的更多的是文件路径而不是类定义)。

尝试“清除类名”

清除类的实例应该会起作用

假设您的基本工作区中有一个“MyClass”实例:

foo = MyClass;
现在,假设您编辑MyClass并添加新的静态方法“bar”:

但是,“清除”-ing foo将删除对上一个类的引用:

clear('foo');
foo = MyClass; 
foo.bar(); % this should now work.
如果您的基本工作区中只有一个或两个类的实例,那么这应该很好。如果基本工作区中有多个类实例,则可能需要编写脚本来清除它们:

varList = whos;
for iVar = 1:numel(varList)
    if isequal( 'MyClass', varList(iVar).class )
        clear( varlist(iVar).name );
    end
end
clear('varList');
clear('MyClass');
如果在更多位置有该类的实例,则可能希望根据需要扩展脚本


只有在修改继承层次结构中的类时,才可能需要最后一次调用以清除类名。

谢谢!但是,有可能对单个类执行此操作吗?据我所知,无法使用CLEAR来更新已修改的单个类。要么全是,要么全不是!=)尝试过重新洗牌,但没有一个选项有效。想清楚上课是唯一的办法,干杯!我不知道它是哪个版本,但现在我担心这不起作用,它会毫无错误地接受它,但类没有更新。另请参见,它还列出了可能容易忘记的实例(例如,在
mlocked
函数中)
varList = whos;
for iVar = 1:numel(varList)
    if isequal( 'MyClass', varList(iVar).class )
        clear( varlist(iVar).name );
    end
end
clear('varList');
clear('MyClass');