如何在matlab中传递空引用,以便isa返回true?

Clo*_*son 5 null matlab reference

我有一个类Foo和一个函数Foo作为输入参数.在这个函数中我也使用isa以下方法进行错误检查:

function (x)  
  if ~isa(x,'Foo')  
     error('Wrong!');  
  end
Run Code Online (Sandbox Code Playgroud)

我想在Java中传递类似null的东西.但是当我通过它时,[]我收到一个错误.你能告诉我我能做些什么吗?我虽然总是传递一个单元格数组或empty每次使用时检查isa.

And*_*ein 9

首先,您可以查看我们的情况

  validParam = isa(x,'Foo') || isempty(x);
Run Code Online (Sandbox Code Playgroud)

但是,最好的方法是使用静态方法创建一个空类empty:

  e = Foo.empty(0);
  isa(x,'Foo')
Run Code Online (Sandbox Code Playgroud)

结果是:

ISA(Foo.empty(0), '富')

ans =

1  
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这对另一种情况也很有用 - 假设您想要动态增长和Foo对象数组.您可以使用单元格数组,但之后会丢失类型安全性.相反,创造Foo.empty().

尽管如此,使用这种方法仍然存在一些问题.处理继承是不够智能的 -

让我们Bar成为一个继承自的阶级Foo.

classdef Bar < Foo

end
Run Code Online (Sandbox Code Playgroud)

然后你分配一个新的Foo对象数组:

x = Foo.empty(0)
Run Code Online (Sandbox Code Playgroud)

x =

0x0空Foo没有属性.
方法

然后尝试添加Bar:

x(end+1) = Bar()
Run Code Online (Sandbox Code Playgroud)

??? 从Bar转换为Foo时发生以下错误:使用==> Foo时出错使输入参数太多.

因此,这种情况的唯一解决方法是使用单元阵列.


编辑(1): 似乎Matlab添加了一个特殊的类来处理继承:

描述

matlab.mixin.Heterogeneous是一个抽象类,为异构数组的形成提供支持.异构数组是在特定类中不同的对象数组,但它们都是从根类派生的或是根类的实例.根类直接从matlab.mixin.Heterogeneous派生.