Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在matlab中传递空引用,使isa返回true?_Matlab_Reference_Null - Fatal编程技术网

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

如何在matlab中传递空引用,使isa返回true?,matlab,reference,null,Matlab,Reference,Null,我有一个类Foo和一个函数,该函数将Foo作为输入参数。在这个函数中,我还使用isa执行一些错误检查: function (x) if ~isa(x,'Foo') error('Wrong!'); end 我想传递一些类似于Java中null的东西。但是,当我传递它时,我得到一个错误。你能告诉我我能做什么吗?我想每次使用isa时,都要传递一个单元格数组或检查是否为空 validParam = isa(x,'Foo') || isempty(x); 但是,最好

我有一个类
Foo
和一个函数,该函数将
Foo
作为输入参数。在这个函数中,我还使用
isa
执行一些错误检查:

function (x)  
  if ~isa(x,'Foo')  
     error('Wrong!');  
  end

我想传递一些类似于Java中null的东西。但是,当我传递它时,我得到一个错误。你能告诉我我能做什么吗?我想每次使用
isa
时,都要传递一个单元格数组或检查
是否为空

  validParam = isa(x,'Foo') || isempty(x);
但是,最好的方法是使用静态方法
empty
,创建一个空类:

  e = Foo.empty(0);
  isa(x,'Foo')
结果是:

isa(Foo.empty(0),'Foo')

ans=

1  
顺便说一句,这对于另一种情况也很有用——假设您希望动态地增长
Foo
对象的数组。您可以使用单元格数组,但这样就失去了类型安全性。而是创建
Foo.empty()

然而,使用这种方法有一个缺点。处理继承还不够聪明-

Bar
成为继承自
Foo
的类

classdef Bar < Foo

end
x=

0x0没有属性的空Foo。
方法

然后尝试添加

x(end+1) = Bar()
???从Bar转换为Foo时发生以下错误: 使用==>Foo时出错 输入参数太多

所以这种情况下唯一的解决方法就是使用单元数组


编辑(1):为了处理继承,Matlab似乎添加了一个:

描述

matlab.mixin.Heterogeneous是一个提供支持的抽象类 用于形成异构阵列。异构阵列是一种 对象数组,这些对象在其特定类中不同,但都是 派生自或是根类的实例。根类派生 直接来自matlab.mixin.Heterogeneous

x(end+1) = Bar()