Resizing array of handle objects
15 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi all,
I'm trying to define a handle object, which is (potentially) an array of objects, and I'm trying to define a method to successfully resize it.
classdef anArrayObject < handle
properties (Access = public)
prop = 0 % just a dummy property
end
methods
% this initializes my array of handle objects
function obj = anArrayObject(n)
if nargin ~= 0
validateattributes(n, {'numeric'}, {'scalar', 'integer' 'positive'});
for i = 1:n
obj(i).prop = i; % Expands the object to become an array of the size n
end
end
end
% Here I'd like to resize my array on demand, but this does not work.
% Any way to resize this array?
function obj = resizeMe(obj, m)
validateattributes(m, {'numeric'}, {'scalar', 'integer' , 'positive'});
if m < numel(obj)
obj = obj(1:m);
end
end
end
end
As from comments in the code: I can successfully crate the array of objects, but the resizeMe function does not do what I want.
myObjArray = anArrayObject(5);
numel(myObjArray)
ans = 5
myObjArray.resizeMe(3);
numel(myObjArray)
ans = 5
Any way to resize this handle object?
0 commentaires
Réponses (1)
Rik
le 19 Déc 2022
The problem is that while your object array is an array of handles, it isn't a handle variable itself. What that means is that you have an array of 5 handle objects, which you then shorten to 3:
myObjArray = anArrayObject(5)
myObjArray.resizeMe(3)
Notice with the last result that the initial variable is not actually modified.
The solution I can think of would be to store the array inside the object, instead of exposing it as a normal array. You can probably overlead subsref to get most of the behavior of an array.
0 commentaires
Voir également
Catégories
En savoir plus sur Multidimensional Arrays dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!