Classdef get methods: allowing get indexing into an array of length either (1x1) or (Nx1).
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
D. Plotnick
el 27 de Mzo. de 2019
Comentada: D. Plotnick
el 28 de Mzo. de 2019
Hello all, I am trying to sort out an issue best shown in this MWE, where I have a property that may be a column vector, but is initialized with a single value.
classdef myClass
properties
A (:,1) double = 0;
end
methods
end
end
Now, lets say I want to index into myClass.A using B = myClass.A(indx). However, I want it so that if myClass.A is still a (1x1) I want to return the initial value, not an "Index exceeds array bounds" error.
I can picture doing this with a get method of the following form
function out = get.A(indx)
if numel(obj.A) == 1
out = obj.A(1);
else
out = obj.A(indx);
end
end
However, this will clearly not work since (A) get methods are limitited to one input, and I need to pass "indx", (B) I don't pass an instance of the object to get.A, so it has no access, and (C) this would wind up being infinitely recursive if I was able to do it.
SO:
Is there a way to allow use of a single default value as the output of a property regardless of the requested index, if that property has not yet been overwritten with an Nx1 vector.
Cheers,
DP
0 comentarios
Respuesta aceptada
Más respuestas (1)
Sean de Wolski
el 28 de Mzo. de 2019
Editada: Sean de Wolski
el 28 de Mzo. de 2019
You could GetAccess Protect the A property and then use a method instead of straight property reference.
methods
function a = getA(obj, indx)
if numel(obj.A) == 1 || nargin == 1
out = obj.A(1);
else
out = obj.A(indx);
end
end
end
Ver también
Categorías
Más información sobre Construct and Work with Object Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!