如何在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()