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');
我有一个简单的数据加载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');