在以下情况下,如何避免在matlab类中重复冗长乏味的包名:
classdef Class < tediouspkgname.Superclass
obj = obj@tediouspkgname.Superclass(...)
。val = somefunc@tediouspkgname.Superclas(...)
。我正在寻找相当于matlabs import
的语句,不幸的是在这些情况下无法使用。
让我们的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
答案 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系统的这个方面。写出完全限定的名称并不仅仅是单调乏味的。这意味着如果您更改包的名称,或将类从一个包移动到另一个包,则必须手动浏览整个代码库,以便为另一个包查找和替换一个包名。