2011-10-23 10 views
16

Jak przetestować/sprawdzić zmienną jest uchwyt funkcji w Matlab?jak przetestować zmienną jest uchwyt funkcji lub nie w Matlab

może to być coś w rodzaju:

[email protected](x)x+1 
isFunctionHandle(f) 

z is* funkcji wbudowanych w nie wydaje się wspierać tego rodzaju badań? ktoś wie? wiele dzięki

+0

Zobacz także [to pytanie] (http://stackoverflow.com/q/19307726/2778484), które testują poprawność (posiadające kod, aby go poprzeć), a także są uchwytami funkcji. – chappjc

Odpowiedz

29

Właściwy sposób jest rzeczywiście za pomocą is* funkcji, mianowicie isa :

if isa(f, 'function_handle') 
    % f is a handle 
else 
    % f is not a handle 
end 

edit: Dla kompletności chciałbym zaznaczyć, że używanie class() służy do sprawdzania, czy coś jest uchwytem funkcji. Jednak w przeciwieństwie do isa, to nie generalizuje dobrze innych aspektów MATLAB, takich jak programowanie obiektowe (OOP), które mają coraz większy wpływ na działanie MATLAB (np. Funkcjonalność działki, zestaw narzędzi kontrolnych, zestaw narzędzi do identyfikacji, ... są mocno oparte na OOP).

Dla osób zaznajomionych z OOP: isa sprawdza również Super typy w x obiektu dla someClass, natomiast strcmp(class(x), 'someClass') oczywiście sprawdza tylko dokładnego typu.

Dla osób, które nie znają OOP: zalecam używanie isa(x, 'someClass') zamiast, ponieważ jest to najwygodniejsze (i typowe) zachowanie tych dwóch.

4

Można użyć class() funkcję:

f = @(x)x+1 

f = 

    @(x)x+1 

>> class(f) 

ans = 

function_handle 

(jest to ciąg znaków zawierający tekst „function_handle”)

Powiązane problemy