【问题标题】:Matlab - property set to [] after accessMatlab - 访问后属性设置为[]
【发布时间】:2018-10-09 21:50:01
【问题描述】:

我有一个简单的数据加载类:

classdef DataLoader
    properties
        data;
    end

    methods
        function obj = loadData(obj, file)
            obj.data = csvread(file);
        end
    end
end

加载数据后,我可以看到对象报告数据在:

s = DataLoader();
s.loadData('data.csv')
ans = 

  DataLoader with properties:

    data: [8738102×8 double]

但是,当我访问数据时:

s.data

ans =

     []

此外,在此访问之后:

s = 

  DataLoader with properties:

    data: []

编辑:所以我已经解决了我的问题:

s = s.loadData('data.csv');

但是有没有办法做到这一点:

s.loadData('data.csv');

【问题讨论】:

    标签: matlab octave


    【解决方案1】:

    正如您已经发现的那样,您必须用loadData 返回的新对象覆盖旧对象,因为您的类是value class。如果您希望您的对象具有类似引用的行为,它需要从handle class 继承。这就是你的新类代码的样子:

    classdef DataLoader < handle  % Inherit from handle class
        properties
            data;
        end
    
        methods
            function loadData(obj, file)  % No need to return output now
                obj.data = csvread(file);
            end
        end
    end
    

    现在您可以使用以下语法:

    s.loadData('data.csv');
    

    【讨论】:

    • 我想补充一下,因为这个问题也被标记为“八度”,八度更喜欢“旧”面向对象的风格,并在引擎盖下使用不同的优化(特别是 this),并且只有目前对classdef 类的支持有限。 (见:octave.org/doc/v4.2.2/classdef-Classes.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2020-11-11
    • 2015-07-17
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    相关资源
    最近更新 更多