return 语句后超类的 Matlab 构造函数
Matlab constructor of superclass after return statement
我试图在实例化超类的子类时检查参数是否属于特定类型,但我不断收到一个错误,似乎与我检查参数类型的方法有关。调试器甚至不允许我在不抛出错误 A constructor call to superclass appears after the object is used, or after a return.
的情况下包含断点 我认为很明显哪一行代码中断了我的 类,但为什么不允许我进行这种类型检查?还有哪些其他方法可以确认我的论点属于特定类型?下面的代码。
classdef superClass < handle
properties
PropertyOne
PropertyTwo
end
methods
function sup = superClass(param1, param2)
sup.PropertyOne = param1;
sup.PropertyTwo = param2;
end
end
end
classdef subClass < superClass
properties
PropertyThree
end
methods
function sub = subClass(param1, param2, param3)
if ~isa(param1, 'char')
disp('param1 must be type char')
return
end
sub@superClass(param1, param2);
sub.PropertyThree = param3;
end
end
end
像这样实现subClass
:
classdef subClass < superClass
properties
PropertyThree
end
methods
function sub = subClass(param1, param2, param3)
assert(ischar(param1),'param1 must be type char')
sub@superClass(param1, param2);
sub.PropertyThree = param3;
end
end
end
在超类构造函数运行之前不能有 return
语句。 return
需要退出函数并输出 sub
,并且 sub
在超类构造函数运行之前不存在。如果您使用 assert
(或者您可以将 if
与 error
一起使用,但 assert
更简单),那么它会退出并且没有 sub
的输出, 所以没关系。
另请注意,您不需要 isa(..., 'char')
,您可以只使用 ischar
。
我试图在实例化超类的子类时检查参数是否属于特定类型,但我不断收到一个错误,似乎与我检查参数类型的方法有关。调试器甚至不允许我在不抛出错误 A constructor call to superclass appears after the object is used, or after a return.
的情况下包含断点 我认为很明显哪一行代码中断了我的 类,但为什么不允许我进行这种类型检查?还有哪些其他方法可以确认我的论点属于特定类型?下面的代码。
classdef superClass < handle
properties
PropertyOne
PropertyTwo
end
methods
function sup = superClass(param1, param2)
sup.PropertyOne = param1;
sup.PropertyTwo = param2;
end
end
end
classdef subClass < superClass
properties
PropertyThree
end
methods
function sub = subClass(param1, param2, param3)
if ~isa(param1, 'char')
disp('param1 must be type char')
return
end
sub@superClass(param1, param2);
sub.PropertyThree = param3;
end
end
end
像这样实现subClass
:
classdef subClass < superClass
properties
PropertyThree
end
methods
function sub = subClass(param1, param2, param3)
assert(ischar(param1),'param1 must be type char')
sub@superClass(param1, param2);
sub.PropertyThree = param3;
end
end
end
在超类构造函数运行之前不能有 return
语句。 return
需要退出函数并输出 sub
,并且 sub
在超类构造函数运行之前不存在。如果您使用 assert
(或者您可以将 if
与 error
一起使用,但 assert
更简单),那么它会退出并且没有 sub
的输出, 所以没关系。
另请注意,您不需要 isa(..., 'char')
,您可以只使用 ischar
。