Class 'dependent' property warning
Show older comments
Hi,
I'm trying to build a class, one of the properties of which is also a class. I want to be able to index the properties of the contained class from the top class. This toy example shows what I mean I hope... I make the inner class and override it's disp method so it displays as I see it....
<...okay this thing won't let me paste code into this so I can't actually ask my question. This editor is really not working very well for me at least...>
11 Comments
Guillaume
on 8 Mar 2019
While there are indeed some issues with the editor, pasting into it is not a known problem.
What happens when you paste?
Arwel
on 8 Mar 2019
Edited: per isakson
on 10 Mar 2019
Geoff Hayes
on 8 Mar 2019
Perhaps try a different browser (Safari?) although I can copy and paste code from my version of MATLAB (on High Sierra) into this site using Chrome...
Guillaume
on 8 Mar 2019
I'll point the relevant people to this thread so they can investigate the copy/paste issue.
In the meantime, even if it's not ideal, we can always work with screenshots.
Copy-paste issues aside I'm not really understanding what the question is or how the code in that screenshot relates. You take about a class that contains a property which is an object of another class, but your example code just shows one class with basic numeric properties.
In theory, indexing into properties of an object that is itself the property of a class should behave as you would expect it to. What exactly is the issue? Your question title talks about a Dependent property warning, but you don't mention this in the question body or give the exact warning you get.
(If you can't post actual code though please at least post a screenshot of Matlab editor rather than Word. Word's underlining of things in red and green just adds confusion while any Matlab underlining that there may be is potentially useful.)
Adam
on 8 Mar 2019
In these situations I always go for the double-property approach in the link Steven Lord pointed to with a dependent property with a set function that stores its data in a private property. It's extra coding, but I don't like ignoring warnings in general. Even if I think I'll never use the class in a way that would cause the problems it refers to I'd just rather avoid even the chance of such hassle down the line, especially when I am working with a team and other people may be less familiar with the potential problems than I am.
Guillaume
on 8 Mar 2019
I don't really understand the need for BiggerClass.Val1. Why can't it be accessed directly from BiggerClass.Sclass since it's just a duplicate. And if it's really needed, it should indeed be a dependent property.
Arwel
on 8 Mar 2019
Steven Lord
on 8 Mar 2019
Scroll to the end of my Answer below. I linked to a documentation page calling out one potential issue that Code Analyzer warning is trying to guard against.
Walter Roberson
on 8 Mar 2019
With regards to copy/paste:
MacOS High Sierra, recent Firefox: I cannot paste into the main portions of any Question, Answer, or Comment that I am editing. I also cannot copy out of anything I am editing. I can copy out of saved text -- so if I want to check the code of something I am writing, I can tell it to save the response and then copy out of the saved version.
My work-around has been to use Safari.
Answers (1)
Steven Lord
on 8 Mar 2019
I believe one of the reasons (maybe the main reason) for that Code Analyzer warning is to avoid accidentally getting into a recursive situation. Consider:
classdef classWithRecursionProblem
properties
x = 0;
y = 0;
end
methods
function obj = set.x(obj, newx)
obj.x = newx;
obj.y = obj.y + 1;
end
function obj = set.y(obj, newy)
obj.y = newy;
obj.x = obj.x + 1;
end
end
end
Construct an instance of this object then try to update one of its properties.
q = classWithRecursionProblem
q.x = 1
You should receive an error indicating that there's a problem with recursion. The set method for the x property causes the set method for the y property to be called and the set method for the y property causes the set method for the x property to be called. It's like a pair of dictionary definitions: "Loop, infinite: see Infinite loop" and "Infinite loop: see Loop, infinite".
Note also that this is a Code Analyzer warning not a Code Analyzer error. As long as you avoid trying to assign to another property inside a different property's set method you're probably okay. Actually, reading the Details for that Code Analyzer warning they describe another somewhat related scenario related to loading objects, linking to this documentation page that provides more information.
Categories
Find more on Debugging and Analysis in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!