У меня проблемы с объявлениями функций и областью действия в 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