Matlab - 属性访问后设置为[]

Matlab - property set to [] after access

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

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');

正如您已经发现的那样,您必须用 loadData 返回的新对象覆盖旧对象,因为您的 class 是 value class. If you want your object to have reference-like behavior, it needs to inherit from the handle class。这就是您的新 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');