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