2012-01-18 6 views
5

Mam klasę Foo i funkcję, która otrzymuje Foo jako parametr wejściowy. W tej funkcji również zrobić sprawdzając jakiś błąd przy użyciu isa:Jak mogę przekazać referencję zerową w Matlab, aby isa zwróciła true?

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

Chcę przekazać mu coś, co jest jak wartość null w Javie. Jednak gdy go zdaję [] pojawia się błąd. Czy możesz mi powiedzieć, co mogę zrobić? Chodzi o to, że zawsze przechodzę przez tablicę komórek lub sprawdzam, czy za każdym razem używam .

Odpowiedz

9

Przede wszystkim, można sprawdzić naszą sytuację z

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

Jednak najlepszym sposobem będzie stworzenie pustej klasie za pomocą metody statycznej empty:

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

a wynik jest :

ISA (Foo.empty (0), "foo)

ans =

1 

Nawiasem mówiąc, jest to również przydatne do innej sprawy - Załóżmy, że chcemy dynamicznie rozwijać i tablicą Foo obiektów. Możesz użyć tablicy komórek, ale stracisz bezpieczeństwo typu. Zamiast tego utwórz Foo.empty().

Niemniej jednak, w użyciu tej metody jest grot. To nie jest na tyle silny, aby obsłużyć dziedziczenie -

Let Bar być klasa, która dziedziczy z Foo.

classdef Bar < Foo 

end 

I przydzielić nową tablicę Foo obiektów:

x = Foo.empty(0) 

x =

0x0 pusty Foo bez właściwości.
Metody

Następnie spróbuj dodać Bar:

x(end+1) = Bar() 

??? Wystąpił następujący błąd podczas konwersji z paska na Foo: Błąd przy użyciu ==> Foo Zbyt wiele argumentów wejściowych.

Jedynym sposobem obejścia tego przypadku jest użycie macierzy komórek.


Edit (1): Wydaje się, że Matlab dodali special class aby obsłużyć dziedziczenie:

Opis

matlab.mixin.Heterogeneous jest klasą abstrakcyjną, która zapewnia wsparcie dla tworzenia heterogenicznych tablic. Szereg heterogeniczny to tablica obiektów, które różnią się w swojej klasie, ale wszystkie pochodzą od lub są instancjami klasy głównej. Klasa główna pochodzi od bezpośrednio z matlab.mixin.Heterogenous.

Powiązane problemy