Matlab - свойство, установленное в [] после доступа - PullRequest
0 голосов
/ 09 октября 2018

У меня есть простой класс загрузки данных:

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

1 Ответ

0 голосов
/ 09 октября 2018

Как вы уже обнаружили, вы должны перезаписать ваш старый объект новым объектом, возвращаемым loadData, поскольку ваш класс является классом значений .Если вы хотите, чтобы ваш объект имел ссылочное поведение, он должен наследоваться от класса дескриптора .Вот как будет выглядеть ваш новый код класса:

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