Change struct property values in a class

6 visualizaciones (últimos 30 días)
Olf
Olf el 28 de Oct. de 2014
Respondida: Olf el 6 de Nov. de 2014
Hi, I have a problem with using a struct as property of a value class. It seems I cannot change the values of fields (or add new fields).
The simplest example is as follows:
classdef testclass
properties
struct_prop=struct;
end
methods
function obj = change_struct_prop(obj, val)
obj.struct_prop.field1 = val;
end
end
end
Trying to change the struct_prop doesn't work:
>> a=testclass;
>> a.change_struct_prop(2);
>> a.struct_prop
ans =
field1: []
>>
Is there any way to manipulate a class property that is a struct (without having to define a separate class for it)? Defining the struct_prop fields in the initialisation function didn't help either.
Thanks a lot,
Olf

Respuesta aceptada

per isakson
per isakson el 28 de Oct. de 2014
Editada: per isakson el 29 de Oct. de 2014
Replace
classdef testclass
by
classdef testclass < handle
and search the help for "Comparing Handle and Value Classes"
&nbsp
In response to the comment
If a value class, replace
>> a.change_struct_prop(2);
by
>> a = a.change_struct_prop(2);
and read the help on the comparison of value and handle classes
  2 comentarios
Olf
Olf el 28 de Oct. de 2014
I tried handle classes before, however I want to create an array of my class which I iteratively define by copying the (n-1)th element to the (n)th element and apply changes to that. If the class is a handle class, all instances will be identical which is not desired. Any way to get around this?
per isakson
per isakson el 28 de Oct. de 2014
See addition to answer

Iniciar sesión para comentar.

Más respuestas (1)

Olf
Olf el 6 de Nov. de 2014
I found a solution that seems to have solved the issue. Instead of inheriting from the handle class I let it inherit from matlab.mixin.Copyable This gives the features from the handle class and also comes with a copy method.
classdef testclass < matlab.mixin.Copyable ...

Categorías

Más información sobre Scope Variables and Generate Names en Help Center y File Exchange.

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by