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.
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