Передать объект в конструктор объекта - PullRequest
0 голосов
/ 08 февраля 2020

Предположим, у меня есть класс

classdef Dummy

    properties
        property    % to be assigned with an object
    end

    methods
        function obj = Dummy(in)
            % Constructor. Assign this object to `in.property`
            if nargin > 0
                in.property = obj;
            end
        end

    end
end

. Я хочу выполнить код

z = Dummy();
z1 = Dummy(z);

. У меня будет z.property = z1 property из z. присвоенный объекту z1

Но на практике, когда я выполняю приведенный выше фрагмент, z.property = [] всегда пуст. Как мне добиться желаемого поведения (желательно с помощью конструктора)?


Я попытался отладить это и обнаружил, что все в порядке, даже с оператором in.property = obj;. Проблема возникает при выходе из объекта, где снова z.property=[].

1 Ответ

0 голосов
/ 08 февраля 2020

Проблема решается путем указания handle суперкласса

classdef Dummy < handle

    properties
        property    % to be assigned with an object
    end

    methods
        function obj = Dummy(in)
            % Constructor. Assign this object to `in.property`
            if nargin > 0
                in.property = obj;
            end
        end

    end
end

, чтобы объект создавался как ссылка. В противном случае этот in.property = obj попытается дать копию объекта, что делает его неудачным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...