Я признаю, что был новичком в Юлии.Однако, просматривая различные документы, я не смог найти подходящий ответ на мой (возможно, очень простой) вопрос.
Что я знаю из Matlab
Рассмотрим два файла впапка src/
называется main.m
и anotherfunc.m
function main
anotherfunc(0)
end
и
function anotherfunc(x)
disp(sin(x))
end
Я бы запустил main
в командном окне и увидел желаемый результат (=0
).Теперь, может быть, я передумаю и предпочитаю
function otherfunc(x)
disp(cos(x))
end
Я бегу main
снова и вижу 1
.
Чего я не знаю о Джулии Как сделать то же самое.Я опробовал два подхода, которые, как я предполагал, сработал.
1)
Файлы anotherfunc.jl
:
function anotherfunc(x)
print(sin(x))
end
и (в том же каталоге) main.jl
:
function main()
anotherfunc(0)
end
Теперь я запускаю julia
в терминале и пишу
julia> include("anotherfunc.jl")
anotherfunc (generic function with 1 method)
julia> include("main.jl")
main (generic function with 1 method)
julia> main()
0.0
Хорошо.Теперь я изменяю sin
на cos
и получаю
julia> main()
0.0
Это меня не удивляет, я знаю, что мне нужен еще include
, то есть
julia> include("anotherfunc.jl")
anotherfunc (generic function with 1 method)
julia> main()
1.0
Так что это работает, нокажется довольно склонным к ошибкам, я забуду о включении в будущем.
2) Я думал, что буду умным и напишу
function main
include("anotherfunc.jl")
anotherfunc(0)
end
Но закрытие julia
и повторный запуск дает
julia> main()
ERROR: MethodError: no method matching anotherfunc(::Int64)
The applicable method may be too new: running in world age 21834, while current world is 21835.
Closest candidates are:
anotherfunc(::Any) at /some/path/anotherfunc.jl:2 (method too new to be called from this world context.)
Stacktrace:
[1] main() at /some/path/main.jl:4
Это, очевидно, неправильно.
Подводя итог: я не знаю о наилучшей процедуре для обработки кода, который разбит на несколькофайлы и изменения в процессе разработки.