Как проверить переменную является дескриптором функции или нет в Matlab - PullRequest
17 голосов
/ 23 октября 2011

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

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

f=@(x)x+1
isFunctionHandle(f)

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

Ответы [ 2 ]

30 голосов
/ 24 октября 2011

Правильный путь действительно с помощью функции 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'), так как это наиболее удобное (и обычно полезное) поведение двух.

4 голосов
/ 23 октября 2011

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

f = @(x)x+1

f = 

    @(x)x+1

>> class(f)

ans =

function_handle

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...