Я пытаюсь понять относительно простой фрагмент кода, но не могу понять, что происходит (я новичок ie Julia, пришедший из Python / Matlab).
function myfunc(number::Integer)
double() = 2*number
square() = number^2
return _ -> (number, double, square)
end
Я понимаю, что myfunc
возвращает анонимную функцию, которая не заботится о переданном ей значении. Так что эти случаи имеют для меня смысл:
julia> n4 = myfunc(4)
#9 (generic function with 1 method)
julia> n4(50)
(4, var"#double#10"{Int64}(4), var"#square#11"{Int64}(4))
В первой строке n4
относится к самой функции анонимной , тогда как во второй анонимная функция вызывается с параметром 50
и делает то, что должно: отбрасывает 50 и возвращает кортеж, содержащий данные, с которыми он был определен .
Я не понимаю, как я могу это сделать:
julia> n4.square
(::var"#square#11"{Int64}) (generic function with 1 method)
julia> n4.square()
16
Тот факт, что n4
, который относится к анонимной функции, имеет дочерние объекты n4.number
, n4.double
, n4.square
- это для меня сюрприз. Как n4
ведет себя, как если бы это была структура? Выполнение n4(*)[2]()
, чтобы вернуть 8 в качестве ответа, имеет смысл, но когда fieldnames(n4)
терпит неудачу, что-то происходит за кулисами, и я не понимаю, как заставить n4.double()
работать. Где / каков механизм, с помощью которого я могу использовать .
после n4
для доступа к функциям / данным?