2012-01-18 19 views
5

Tengo una clase Foo y una función que obtiene Foo como parámetro de entrada. En esta función también hago comprobar algún error usando isa:¿Cómo puedo pasar una referencia nula en matlab para que isa devuelva verdadero?

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

Quiero pasarlo algo que es como nula en Java. Sin embargo, cuando lo paso [] me sale un error. ¿Puedes decirme qué puedo hacer? Pensé en pasar siempre una matriz de células o verificar empty cada vez que uso isa.

Respuesta

9

En primer lugar, puede consultar nuestras condiciones, con

validParam = isa(x,'Foo') || isempty(x); 

Sin embargo, la mejor manera será la creación de una clase vacía utilizando el método estático empty:

e = Foo.empty(0); 
    isa(x,'Foo') 

Y el resultado es :

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

ans =

1 

Por cierto, esto también es útil para otro caso - Supongamos que desea crecer de forma dinámica y variedad de objetos Foo. Puede usar una matriz de celdas, pero luego pierde el tipo de seguridad. En su lugar, cree Foo.empty().

Sin embargo, hay un caveeat en el uso de este método. No es lo suficientemente inteligente como para manejar la herencia -

Deje Bar ser una clase que hereda de Foo.

classdef Bar < Foo 

end 

Y se puede asignar un nuevo conjunto de objetos Foo:

x = Foo.empty(0) 

x =

0x0 vacío Foo sin propiedades.
Métodos

A continuación, intente añadir Bar:

x(end+1) = Bar() 

??? Se produjo el siguiente error al pasar de Bar a Foo: Error al usar ==> Foo Demasiados argumentos de entrada.

Así que la única solución para este caso es usar la matriz de celdas.


Editar (1): Parece que Matlab han añadido un special class con el fin de manejar la herencia:

Descripción

matlab.mixin.Heterogeneous es una clase abstracta que proporciona soporte para la formación de matrices heterogéneas. Una matriz heterogénea es una matriz de objetos que difieren en su clase específica, pero todos son derivados de o son instancias de una clase raíz. La clase raíz deriva directamente de matlab.mixin.Heterogeneous.

Cuestiones relacionadas