Создание замыкания в Matlab - PullRequest
1 голос
/ 12 марта 2020

У меня есть функции в Matlab, которые принимают два аргумента, изображение и ядро, и выполняют различные приложения для обработки изображений. Подпись Gen_Filt (kernel, img) для различных операций фильтрации. Я пытаюсь создать вторую функцию, которая закрывает операцию фильтрации с указанным ядром c, чтобы она могла выполнять определенную операцию с изображениями.

function [closure] =Close_Over(General,kernel)
    function[out_img]=inner(img)

        out_img=General(kernel,img);

    end
closure=@inner;


end

Таким образом, это займет определенный тип операции фильтрации c (подпись Gen_Filt) и конкретное ядро ​​c и вернет обработчик функции с ядром, привязанным к указанной операции фильтрации c. , Тем не менее, он, кажется, вызывает функцию операции фильтрации и выдает следующую ошибку:

Ошибка в Gen_Filt (строка 61)

out_img = conv2 (img, kernel, 'same') ;

, который заставляет меня думать, что он пытается оценить операцию фильтрации Gen_Filt, прежде чем я смогу вызвать обработчик с указанным c аргументом изображения.

Правильно ли я понимаю проблему и / или я ошибаюсь?

1 Ответ

1 голос
/ 13 марта 2020

Как уже упоминалось, есть проблемы с предоставленным вами кодом. Но, чтобы ответить на заголовок поста, вот как вы создаете замыкание, используя вложенные функции для захвата переменных в MATLAB.

function fun = createPlusOneFunc

    x = 0; % x is captured
    fun = @inner

    function out = inner(y)
        x = x+y;
        out = x;
    end

end

>> fun = createPlusOneFunc();
>> out = fun(1) % Increments captured variable state by 1.
>> out = fun(2) % Increments captured variable state by 2.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...