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(或者您可以将 iferror 一起使用,但 assert 更简单),那么它会退出并且没有 sub 的输出, 所以没关系。

另请注意,您不需要 isa(..., 'char'),您可以只使用 ischar