Updating property of an Object without creating new object

21 visualizaciones (últimos 30 días)
Martyn
Martyn el 15 de Mzo. de 2015
Comentada: Arvind el 7 de Dic. de 2022
Hi
I’m writing a class for the first time, and got an issue I don’t understand.
To simplify the problem, assume my class is as follows:
========================================
classdef testClass
properties
count
end
methods
function obj = testClass
obj.count = 1;
end
function obj = increment(obj)
obj.count = obj.count + 1;
end
end
end
========================================
>> x = testClass;
This creates the class and sets x.count to 1 as required
I then want to increment the value of x.count I was hoping that:
>> x.increment;
would add 1 to count. But it simply creates a new object (‘ans’), where ans.count == 2
I can of course write,
>> x = x.increment;
But that feels illogical.
I've tried various things, and Googled the type of problem, but have found a solution. So any guidance would be welcome.
Thanks. Martyn
  2 comentarios
Dr. ghada farouk
Dr. ghada farouk el 29 de Dic. de 2018
Editada: Walter Roberson el 29 de Dic. de 2018
you should write
x=x.increment(x);
Walter Roberson
Walter Roberson el 29 de Dic. de 2018
Dr. ghada farouk: writing that is not needed if you use a handle class.

Iniciar sesión para comentar.

Respuesta aceptada

Sebastian Castro
Sebastian Castro el 15 de Mzo. de 2015
Editada: Sebastian Castro el 15 de Mzo. de 2015
When you create a class in MATLAB, it is by default a value class. If you want to update objects by reference, you should make this a handle class by changing the first line to:
classdef testClass < handle
EDIT: Also, you wouldn't necessarily need output arguments for the methods of the handle class.
Check out this documentation page for the differences between value classes and handle classes.
- Sebastian
  4 comentarios

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Handle Classes 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!

Translated by