サブクラスコンストラクタでスーパークラスの引数検証(arguments)を継承する方法
5 次查看(过去 30 天)
显示 更早的评论
例えばスーパークラスが以下で定義されているとします.
classdef SuperClass < handle
properties
n
a
b
end
methods
function obj = SuperClass(n,opt)
arguments
n
opt.a = 1
opt.b = 2
end
obj.n = n;
obj.a = opt.a;
obj.b = opt.b;
end
end
end
上記を継承し,オプション引数(opt)としてパラメータcを追加したサブクラスを作成したいとします.
思い描く理想的な擬似コードは以下です.
classdef SubClass < SuperClass
properties
c
end
methods
function obj = SubClass(n,opt)
arguments
% スーパークラスで行っているn, opt.a,
% opt.bの検証もここで行ってほしい.同じことを記載しないといけないのか?
opt.c = 3
end
% ここでスーパークラスのコンストラクタが呼ばれる??
% n, opt.a, opt.bを引数として受け取り,スーパークラスのコンストラクタをコールしたい.
obj.c = opt.c;
end
end
end
一方で,動作するように改修したSubClassコードは以下です.
classdef SubClass < SuperClass
properties
c
end
methods
function obj = SubClass(n,opt,opt2)
arguments
% スーパークラスで行っている検証をもう一度書きたくない.
% オプションの項目,初期値も含めてスーパークラスの値を継承したい
n
opt.a = 1
opt.b = 2
%%%%%%%%%%%%%
opt2.c = 3
end
% スーパークラスのコンストラクタ
varargin = namedargs2cell(opt);
obj@SuperClass(n,varargin{:});
obj.c = opt2.c;
end
end
end
クラスに関する基本的な理解が乏しくて申し訳ないのですが,質問は以下です.
”理想的な擬似コード”や”改修したSubClassコード”のコメントに記載したように,SubClassの引数検証においてSuperClassですでに記述している引数検証を省略(継承)する方法はありますか?可能な場合どのような方法があるでしょうか.またSuperClassのコンストラクタをどのようにコールすればよろしいでしょうか?
回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 アセンブリ 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!