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

时间:2009-07-01 14:31:03

标签: oop matlab function scope

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

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

3 个答案:

答案 0 :(得分:6)

CLEAR发出此调用应该这样做:

clear classes

这样做的一个不幸的副作用是它还有效地发出了清除所有,它也清除了工作区中的所有变量(但是,当你关闭并重新启动MATLAB时,无论如何都会发生这种情况)。清除工作空间实际上是有用的,因为它将删除与类的版本相同类型的任何变量,这可能无法正确使用 new 你班级的版本。

函数REHASH 可能有效,但我对此表示怀疑(我认为它更多地处理文件路径而不是类定义)。

答案 1 :(得分:1)

清除班级的实例应该有效。

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

foo = MyClass;

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

foo.bar(); % Will cause error, as foo is instance of previous "MyClass"

但是,“clear”-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');

如果您在更多位置拥有该类的实例,则可能希望根据需要扩展该脚本。

如果要对继承层次结构中的类进行修改,则可能只需要最后一次清除类名称。

答案 2 :(得分:0)

尝试“clear classname”