Я не вижу необходимости наследования здесь.
Наиболее близким решением для вашего текущего кода будет что-то вроде этого:
classdef FileIO
properties
metaData = []; % stores meta data in Nx2 array
end
methods
function myTestData = readDataFromFile(this, thisFile)
[filepath, name, ext] = fileparts(thisFile);
inFile = textread(thisFile, '%s', 'delimiter', '\n');
this = this.setMetaDataFromFile(inFile, ext);
myTestData = TestData;
myTestData.metaData = this.metaData;
end %readDataFromFile
function this = setMetaDataFromFile(this, inFile, ext)
% ...
end
end % Methods
end % Class
Здесь FileIO.readDataFromFile
возвращает объект TestData
. Вы бы написали:
myFileIO = FileIO;
myTestData = myFileIO.readDataFromFile('filename');
Но я думаю, что это действительно уродливое использование класса, если вы создаете объект, вызываете в нем одну функцию, а затем никогда больше не используете объект, это означает, что вам нужна свободная функция:
function myTestData = readDataFromFile(this, thisFile)
[filepath, name, ext] = fileparts(thisFile);
inFile = textread(thisFile, '%s', 'delimiter', '\n');
metaData = getMetaDataFromFile(inFile, ext);
myTestData = TestData;
myTestData.metaData = metaData;
function metaData = getMetaDataFromFile(inFile, ext)
% ...
Здесь getMetaDataFromFile
является закрытой функцией (при условии, что вам не нужно вызывать ее самостоятельно). Теперь вы просто делаете:
myTestData = readDataFromFile('filename');
Обратите внимание, что бесплатную версию функции проще вызывать (не нужно создавать объект, который вы на самом деле не используете), а его код короче, потому что вокруг него нет classdef
.
Другая альтернатива - сделать readDataFromFile
методом класса TestData
. Обратите внимание, что вы можете просто переместить созданную выше функцию в каталог @TestData
, чтобы сделать ее методом, ее не нужно записывать в файл classdef
.