【问题标题】:Pass object in the constructor of an object在对象的构造函数中传递对象
【发布时间】:2020-05-24 06:51:41
【问题描述】:

假设我有一堂课

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 z 的property 分配给对象z1

但在实践中,当我执行上面的 sn -p 时,z.property = [] 总是为空。如何实现我想要的行为(最好使用构造函数)?


我尝试对此进行调试,发现即使使用in.property = obj; 语句也一切正常。退出对象时出现问题,再次出现z.property=[]。

【问题讨论】:

    标签: matlab oop constructor properties initialization


    【解决方案1】:

    通过指定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 将尝试提供对象的副本,从而导致失败。

    【讨论】:

    • @CrisLuengo 感谢您指出这一点。我的问题是一个错误的陈述,而不是我改变它。
    猜你喜欢
    • 2014-10-24
    • 2011-02-21
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多