Обновление 2018 года: обязательно проверьте все ответы, так как ответ на этот вопрос несколько раз менялся с годами. На момент этого обновления ответ Revise.jl
вероятно, является лучшим решением.
У меня есть файл "/SomeAbsolutePath/ctbTestModule.jl", содержимое которого:
module ctbTestModule
export f1
f1(x) = x + 1
end
Я запускаю Джулию в терминале, который запускает "~/.juliarc.jl". Код запуска включает в себя строку:
push!(LOAD_PATH, "/SomeAbsolutePath/")
Следовательно, я могу сразу набрать в консоли Юлия:
using ctbTestModule
загрузить мой модуль. Как и ожидалось, f1(1)
возвращает 2
. Теперь я вдруг решил, что хочу редактировать f1
. Я открываю "/SomeAbsolutePath/ctbTestModule.jl" в редакторе и изменяю содержимое на:
module ctbTestModule
export f1
f1(x) = x + 2
end
Сейчас я пытаюсь перезагрузить модуль в моей активной сессии Джулии. я попробую
using ctbTestModule
но f1(1)
все еще возвращает 2
. Далее я пытаюсь:
reload("ctbTestModule")
как предложено здесь, но f1(1)
все еще возвращает 2
. Наконец, я пытаюсь:
include("/SomeAbsolutePath/ctbTestModule.jl")
как здесь предлагается, что не является идеальным, поскольку мне приходится вводить полный абсолютный путь, поскольку текущим каталогом может быть не "/SomeAbsolutePath". Я получаю предупреждающее сообщение Warning: replacing module ctbTestModule
который звучит многообещающе, но f1(1)
все еще возвращает 2
.
Если я using ctbTestModule
текущий сеанс Julia, начну новый и using ctbTestModule
, я получу желаемое поведение, т.е. f1(1)
вернет 3
. Но, очевидно, я хочу сделать это без перезапуска Джулии.
Итак, что я делаю не так?
Другие детали: Julia v0.2 на Ubuntu 14.04.