Как проверить переменную является дескриптором функции или нет в Matlab

Как проверить/проверить переменную является дескриптором функции в matlab?

это может быть что-то вроде:

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

Функции встроенного ввода is*, похоже, не поддерживают эти проверки? Кто-нибудь знает? большое спасибо

Ответы

Ответ 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'), поскольку это наиболее удобное (и общее) поведение этих двух.

Ответ 2

Вы можете использовать функцию class():

f = @(x)x+1

f = 

    @(x)x+1

>> class(f)

ans =

function_handle

(Это строка, содержащая текст 'function_handle')