Change struct property values in a class

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

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?
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 Centro assistenza e File Exchange

Prodotti

Richiesto:

Olf
il 28 Ott 2014

Risposto:

Olf
il 6 Nov 2014

Community Treasure Hunt

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

Start Hunting!

Translated by