Правильный путь действительно с помощью функции is*
, а именно isa
:
if isa(f, 'function_handle')
% f is a handle
else
% f is not a handle
end
edit: Для полноты я хотел бы отметить, чтоиспользование class()
работает для проверки, является ли что-то дескриптором функции.Однако, в отличие от isa
, это плохо обобщает другие аспекты MATLAB, такие как объектно-ориентированное программирование (ООП), которые оказывают все большее влияние на работу MATLAB (например, функциональность графика, панель инструментов управления, панель инструментов идентификации)., ... в значительной степени основаны на ООП.
Для людей, знакомых с ООП: isa
также проверяет супертипы (родительские типы) объекта x
на someClass
, тогда как strcmp(class(x), 'someClass')
очевидно, проверяет только точный тип.
Для людей, которые не знают ООП: я рекомендую использовать isa(x, 'someClass')
вместо strcmp(class(x), 'someClass')
, так как это наиболее удобное (и обычно полезное) поведение двух.