Change struct property values in a class

4 visualizzazioni (ultimi 30 giorni)
Olf
Olf il 28 Ott 2014
Risposto: Olf il 6 Nov 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

Risposta accettata

per isakson
per isakson il 28 Ott 2014
Modificato: per isakson il 29 Ott 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 Commenti
Olf
Olf il 28 Ott 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 il 28 Ott 2014
See addition to answer

Accedi per commentare.

Più risposte (1)

Olf
Olf il 6 Nov 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 ...

Categorie

Scopri di più su Scope Variables and Generate Names in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by