【问题标题】:How to get MATLAB to recognise newly added static methods?如何让 MATLAB 识别新添加的静态方法?
【发布时间】:2009-07-01 14:31:03
【问题描述】:

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

肯定有我可以使用的“更新”或“刷新”类型的命令,这样我每次添加函数时都不必重新启动 MATLAB 环境?

【问题讨论】:

    标签: oop matlab function scope


    【解决方案1】:

    CLEAR 发出这个调用应该可以做到:

    clear classes
    

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

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

    【讨论】:

    • 确实有效,谢谢!是否可以在单个班级上执行此操作?
    • 据我所知,没有办法使用 CLEAR 来更新已修改的单个类。要么全有,要么全无! =)
    • 尝试了 rehash,没有一个选项有效。认为清晰的课程是唯一的方法,干杯!
    • 我不知道它是从哪个版本开始的,但现在it should suffice to clear all class instances
    【解决方案2】:

    清除类的实例应该可以工作。

    假设您的基础工作区中有一个“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');
    

    如果您在更多位置有该类的实例,您可能希望适当地扩展脚本。

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

    【讨论】:

    【解决方案3】:

    尝试“清除类名”

    【讨论】:

    猜你喜欢
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    相关资源
    最近更新 更多