assigning to object variables from within-object functions
Mostrar comentarios más antiguos
Can anyone explain me the following code, please?
myObj = myClass() ;
newObj = myObj.Increment() ;
disp myObj.Value
disp newObj.Value
myClass is defined as follows:
classdef myClass
properties
Value
end
methods
function self = myClass(self)
self.Value = 5 ;
end
function self = Increment(self)
self.Value = self.Value + 1 ;
end
end
end
Here myObj.Value is always 5, and it is not incremented to 6. In all the other languages I know, there is no need to explicitely write
newObj = oldObj.Function()
in order to make actions of .Function effective on the object itself. Is MATLAB working in that way, or there is something I am missing?
Thank you all,
Mike
Respuesta aceptada
Más respuestas (1)
Brendan Hamm
el 6 de Jul. de 2015
Editada: Brendan Hamm
el 6 de Jul. de 2015
If you want to have your original object updated you should make your class a handle class:
classdef myClass < handle
properties
Value
end
methods
function self = myClass()
self.Value = 5 ;
end
function Increment(self)
self.Value = self.Value + 1 ;
end
end
end
By default MATLAB is using a pass by value behavior, so you are passing in your object as an argument to a method, but getting back a different object. Handle classes are more akin to classes in other languages and have a pass by reference behavior.
mc = myClass
mc.Increment
mc.Value
ans =
6
2 comentarios
Michel du Montmorency
el 6 de Jul. de 2015
Luke Perry
el 3 de Jul. de 2019
Editada: Luke Perry
el 3 de Jul. de 2019
Thank you Brendan. This was very helpful. However, is there any reason for creating another instance of the object and passing it back through?
From what I understand of MATLAB, due to problems in debugging, it is not good to set an object equal to itself such as the following:
myclass=New_Class();
myclass=myclass.SetColor('yellow');
myclasscolor=myclass.GetColor();
where the class is defined below:
classdef New_Class
properties (Access = protected)
color;
end
methods (Access = public)
function obj = New_Class(obj)
obj.color='';
end
end
methods
function obj = SetColor(obj,color)
obj.color=color;
end
function color = GetColor(obj)
color=obj.color;
end
end
end
Why then would the default class be encouraged to act this way? I should be able to just do:
myclass=New_Class();
myclass.SetColor('yellow');
myclasscolor=myclass.GetColor();
Otherwise this seems like a poor way of going about Object-Oriented Programming.
Categorías
Más información sobre Handle Classes en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!