2009-07-01 45 views
5

我正在使用类和静态方法在名称空间中'范围'函数,类似于C#。然而,每次我给课程添加一个新的方法,起初都没有找到。我必须重新启动MATLAB环境(2007a)才能识别新的方法。如何让MATLAB识别新添加的静态方法?

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

回答

6

发出此呼吁CLEAR应该这样做:这

clear classes 

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

函数 REHASH 可能工作,但我怀疑它(我认为它比类定义处理更多的文件路径)。

+0

这样做的工作,谢谢!是否有可能在个人课上做到这一点? – Brendan 2009-07-01 15:56:14

+0

据我所知,没有办法使用CLEAR来更新已修改的单个类。这是全部或没有! =) – gnovice 2009-07-01 16:56:13

+1

试过rehash,没有任何选项的工作。认为明确的课程是唯一的方式,欢呼! – Brendan 2009-07-01 20:24:48

0

尝试“清类名”你们班应该工作的

1

结算情况。

假设你在你的基础工作空间中有 “MyClass的” 的一个实例:

foo = MyClass; 

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

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'); 

如果您在多个位置的类的实例,你可能要延长脚本作为适当的。

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

相关问题