Создание полей свойства struct как свойств класса в Matlab
Мне нужно определить класс с именем MobileBaseStation и свойство DataChannel, которое представляет собой структуру, как показано ниже,
classdef MobileBaseStation
properties
DataChannel = struct('TxScheme','SpatialMux','NLayers',4);
end
properties (Constant = true)
supportedTxSchemes = {'Port0','TxDiversity','CDD','SpatialMux','MultiUser','Port5','Port7-8','Port8','Port7-14'};
end
methods
function this = MobileBaseStation(this,TxSchemeChoice,NLayers)
this.DataChannel.TxScheme = TxSchemeChoice;
this.DataChannel.NLayers = NLayers;
end
function this = set.DataChannel.TxScheme(this,value)
if ismember(value,this.supportedTxSchemes)
this.DataChannel.TxScheme = value;
end
end
function this = set.DataChannel.NLayers(this,value)
if strcmpi(this.TxScheme,'Port8') && value==1
set.DataChannel.NLayers = value;
end
end
end
end
Установщики обязаны применять границы / ограничения для полей структуры DataChannel. Я хочу, чтобы поля структуры были свойствами класса MobileBaseStation, чтобы я мог использовать установщики. Как я могу добиться этого в Matlab?
1 ответ
Я думаю, что вы хотели бы сделать DataChannel
частный, так что вы можете контролировать доступ через зависимые методы получения и установки собственности, например:
classdef MobileBaseStation
properties(GetAccess=private, SetAccess=private)
DataChannel = struct('TxScheme','SpatialMux','NLayers',4);
end
...
properties(Dependent=true)
TxScheme;
NLayers;
end
methods
function v = get.TxScheme(this), v = this.DataChannel.TxScheme; end
function v = get.NLayers(this), v = this.DataChannel.NLayers; end
function this = set.TxScheme(this,v)
assert(ismember(v,this.supportedTxSchemes),'Invalid TxScheme - %s.',v);
this.DataChannel.TxScheme = v;
end
...
end
end