Inheritance of classes inside a package
Afficher commentaires plus anciens
Hi,
I have run into problems when using class inheritance in combination with packages. I think it is the same issue as already asked in MATLAB newsgroup a few years ago.
First, suppose I have a bunch of files with the following structure:
./InnerClass.m
./OuterClass.m
and the following conents:
-- InnerClass.m :
classdef InnerClass
end
-- OuterClass.m :
classdef OuterClass < InnerClass
end
Now, being in the . directory, when I issue the command:
>> obj = OuterClass
I get the following answer:
obj =
OuterClass with no properties.
Methods, Superclasses
So far, so good, it works as expected.
Let's move the classes into a package, so that we would have the following structure:
./+package/InnerClass.m
./+package/OuterClass.m
Now, being in the . directory, the command
>> obj = OuterClass
ends up with an error. Of course, now the classes are part of package, we have to call it this way:
>> obj = package.OuterClass
But, GEEEEZ, I got another error message!!!
??? Error using ==> package.OuterClass
The specified super-class 'InnerClass' contains a parse error or cannot be found on MATLAB's search path, possibly shadowed by
another file with the same name.
QUESTION 1: Is this the expected behavior? If yes, what am I doing wrong???
Ok, so it seems that the OuterClass inside package somehow cannot see the definition of the InnerClass. Well, OK, so when I change the current working directory to be the +package directory and try to create the object from there, everything should work as in the beginning, right?
>> cd +package
>> obj = OuterClass
??? Undefined function or variable 'OuterClass'.
WHAT!?!?!
Question 2: Is this the expected behavior? Does the situation of the package directory being the working directory somehow change the way the source files are processed?
Question 3: I work in R2009a, is it the same in the newer versions?
I feel completely puzzled! These are really basic things and I do not understand them. Can somebody help me???
Thanks a lot,
Petr
Réponse acceptée
Plus de réponses (1)
Daniel Shub
le 25 Juil 2011
0 votes
This seems to me to the documented (although maybe not expected) behavior.
Quesiton 1: The documentation of calling a package method within the package:
says that you must use the "package." notation.
Question 2: The documentation on "Packages and the MATLAB Path" is pretty clear:
that being in the package directory doesn't do much.
Question 3: The documentation is from r2011a, so yes, it is the same in the newer version.
3 commentaires
Petr Posik
le 25 Juil 2011
Ron Lu
le 22 Mai 2013
That is lame. If I write my classes first, then separate them into different packages, I have to go back to add package name dot (or import *) anywhere the class is referred.
Daniel Shub
le 23 Mai 2013
@Ron, I would suggest you file an enhancement request if you would like to see a change.
Catégories
En savoir plus sur Debugging and Analysis dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!