避免在Matlab中重复超类的包名

时间:2016-09-20 13:36:02

标签: matlab oop package

在以下情况下,如何避免在matlab类中重复冗长乏味的包名:

  • 指定超类时,例如classdef Class < tediouspkgname.Superclass
  • 调用超类构造函数时,例如obj = obj@tediouspkgname.Superclass(...)
  • 调用超类方法时,例如val = somefunc@tediouspkgname.Superclas(...)

我正在寻找相当于matlabs import的语句,不幸的是在这些情况下无法使用。

MWE:

让我们的Matlab路径中有一个名为+tediouspkgname/的文件夹。所以Matlab认识到有一个名为tediouspkgname的包。

让我们有一个ExampleClass类,它保存在文件+tediouspkgname/ExampleClass.m中:

classdef ExampleClass
    properties
        p
    end
    methods
        function obj = ExampleClass(p)
            obj.p = p;
        end
        function print(obj)
            fprintf('p=%s\n',obj.p);
        end
    end
end

让另一个派生自ExampleClass的类生活在文件中 +tediouspkgname/DerivedClass.m

classdef DerivedClass < tediouspkgname.ExampleClass
    methods
        function obj = DerivedClass(p)
            obj = obj@tediouspkgname.ExampleClass(p);
        end
        function print(obj)
            print@tediouspkgname.ExampleClass(obj);
            fprintf('--Derived.\n');
        end
    end
end

我希望以下命令在没有错误的情况下工作,同时尽量少提及tediouspkgname.

e = tediouspkgname.ExampleClass('Hello');
e.print();

o = tediouspkgname.DerivedClass('World');
o.print();

特别是,DerivedClass的这个定义给了我错误ExampleClass is not a valid base class

classdef DerivedClass < tediouspkgname.ExampleClass
    methods
        function obj = DerivedClass(p)
            obj = obj@tediouspkgname.ExampleClass(p);
        end
        function print(obj)
            import tediouspkgname.ExampleClass
            print@ExampleClass(obj);
            fprintf('--Derived.\n');
        end
    end
end

1 个答案:

答案 0 :(得分:0)

命令行中有两个示例:

e = tediouspkgname.ExampleClass('Hello');
e.print();

o = tediouspkgname.DerivedClass('World');
o.print();

对于这些情况,您可以在命令行中使用import

import tediouspkgname.*
e = ExampleClass('Hello');
e.print();

o = DerivedClass('World');
o.print();

它应该可以正常工作。

对于其他情况(在类定义行中,以及调用超类方法时),您需要使用包括包的完全限定名称。

我不喜欢MATLAB OO系统的这个方面。写出完全限定的名称并不仅仅是单调乏味的。这意味着如果您更改包的名称,或将类从一个包移动到另一个包,则必须手动浏览整个代码库,以便为另一个包查找和替换一个包名。