Как принять несколько типов аргументов в валидаторе функции Matlab? - PullRequest
1 голос
/ 24 октября 2019

У меня есть определенная функция, скажем, myFunc, у которой есть аргумент, скажем, funcHandleArg, который должен быть экземпляром function_handle. Тем не менее, этот аргумент не ограничивается одним function_handle, но на самом деле может быть набором function_handles. Поскольку Matlab не принимает нескалярные массивы дескрипторов функций [func_handle1, func_handle2], я должен передать этот аргумент в виде массива ячеек function_handle s {func_handle1, func_handle2}.

Теперь мой вопрос: как мне убедиться, что и funcHandleArg = func_handle1 и funcHandleArg = {func_handle1, func_handle2} проверены и приняты в качестве входных аргументов. Подводя итог, я хотел бы что-то вроде этого:

function output = myFunc(funcHandleArg, someOtherStuff)
arguments
    funcHandleArg function_handle "AND cells of function_handles"
    someOtherStuff otherStuff
end
output = someFunctionOf(funcHandleArg, someOtherStuff)
end 

1 Ответ

2 голосов
/ 25 октября 2019

Вы можете написать простую функцию проверки, например:

function myFunc(fcnOrFcns, otherArgs)
arguments
    fcnOrFcns {isOneOrMoreFunction}
    otherArgs
end
celldisp({fcnOrFcns, otherArgs});
end

function isOneOrMoreFunction(f)
isFcn = @(f) isa(f, 'function_handle');
assert(isFcn(f) || (iscell(f) && all(cellfun(isFcn, f))));
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...