How can an object array be extented by itself?
2 views (last 30 days)
Show older comments
Martin Schmidt
on 26 Oct 2015
Commented: Martin Schmidt
on 27 Oct 2015
I would like an object array to be able to extend itself. I tried the example below but the size of the object array (5x1) does not change to (6x1). Of couse I can append an object to the object array outside, but what about inside the object array?
classdef TestAdd < handle
properties
val=1;
end
methods
function obj=TestAdd(n)
if nargin>0
obj(n,1)=TestAdd;
for ii=1:n
obj(ii,1).val=ii;
end
end
end
function add(obj)
N=length(obj)+1;
obj(end+1,1)=TestAdd;
obj(N,1).val=N;
end
end
end
Command line in/output
>> a=TestAdd(5)
a =
5x1 TestAdd array with properties:
val
>> a.add()
>> a
a =
5x1 TestAdd array with properties:
val
0 Comments
Accepted Answer
Titus Edelhofer
on 26 Oct 2015
Hi,
interesting observation. I would explain as follows: the handle property means, that we use references to objects instead of the objects themselves. This means, that you can manipulate object properties without the need to return the changed object.
The structure of the object itself is not falling into this handle behavior. So you need to return the (new) object.
function obj = add(obj)
N=length(obj)+1;
obj(end+1,1)=TestAdd;
obj(N,1).val=N;
end
Now you call as follows:
>> o = TestAdd(5)
o =
5x1 TestAdd array with properties:
val
>> o = o.add
o =
6x1 TestAdd array with properties:
val
Of course you can encapsulate this into a new class if you like :).
Hope this helps,
Titus
More Answers (1)
Guillaume
on 26 Oct 2015
I find matlab's concept that an array of objects is the same type as the objects themselves very very wrong and I would avoid relying on this.
If I were you I would have a second class that is dedicated to handling the array.
I'm not sure why your example fails. My guess would be the array of object isa object concept breaks down when you try to modify the array size outside of the constructor. The doc on array of objects is so sparse that it's difficult to know what is or isn't supposed to work.
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!