1

The following MATLAB code does not work. I guess it has something to do that in the function changer, MATLAB tries to equal the objects A and B and not just setting the values to the same. Any workaround for that?

classdef foo
    %FOO Summary of this class goes here
    %   Detailed explanation goes here

    properties
        A=5
        B=0
    end

    methods
        function changer(obj)
            obj.B=obj.A
        end
    end

end
chappjc
  • 30,359
  • 6
  • 75
  • 132
bios
  • 997
  • 3
  • 11
  • 20

1 Answers1

5

I think the code is actually working fine, just not doing quite what you expect.

The way you've defined it, foo is a value class, so it has value semantics, rather than reference (or handle) semantics. When you execute changer(myobj), MATLAB is creating a copy of myobj with the new value of B and returning it to you. The original myobj remains unchanged. When implementing a value class, you would typically add an output argument to changer in order to be able to further work with this new copy.

function obj = changer(obj)

If you set foo to be a handle class, by inheriting from handle:

classdef foo<handle

it will then have reference (or handle) semantics, where the original myobj is modified (you then no longer need the output argument from changer):

>> myobj = foo;
>> changer(myobj); % or alternatively myobj.changer
>> myobj.B
ans =
     5
Sam Roberts
  • 23,951
  • 1
  • 40
  • 64