Как внутри функции создать новую функцию на основе параметров исходной функции, чтобы передать ее в качестве аргумента другой функции - PullRequest
0 голосов
/ 04 декабря 2018

У меня проблемы с объявлениями функций и областью действия в julia.У меня есть основная функция, давайте назовем ее mainfunc, которая принимает некоторые аргументы.В рамках этой функции я бы в конечном итоге хотел вызвать другую функцию, скажем callfunc, которая принимает функцию в качестве аргумента.Эту функцию я назову passfunc.

Еще одно осложнение, которое у меня есть, заключается в том, что есть конечная функция, которую я определяю вне логики, которая зависит от аргументов, но все же зависит от аргументов по-другому.Я могу назвать это initfunc.Для создания passfunc.

необходимо составить какую-то другую функцию, в зависимости от аргументов. На основе аргументов, данных mainfunc, у меня будут разные определения passfunc.Учитывая ответ, который я получил на связанный вопрос здесь , я сначала попытался определить свою функциональную логику следующим образом, используя анонимные функции, которые, по-видимому, более эффективны:

function mainfunc(args)

    init_func = x -> funcA(x, args)

    if args[1] == "foo"
        anon_func = x -> func1(x, args)
    elseif args[1] == "bar"
        anon_func = x -> func2(x, args)
    end

    function passfunc(x)
        return init_func(x) + anon_func(x)
    end

    # ... define other args...

    callfunc(passfunc, other_args)
end

Определение моегофункция в этом случае приводит к ошибкам в julia - очевидно, passfunc является неопределенной переменной, когда я запускаю этот код.Разве область не позволяет определять анонимные функции в операторах if?Как еще я мог бы написать код, который достиг бы этого?

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

Кроме того, я запускаю это с julia v0.7

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