Рассмотрим следующий код:Сообщения компилятора в Джулии
Файл C.jl
module C
export printLength
printLength = function(arr)
println(lentgh(arr))
end
end #module
Файл Main.jl
using C
main = function()
arr = Array(Int64, 4)
printLength(arr)
end
main()
Давайте попробуем выполнить его.
$ julia Main.jl
ERROR: lentgh not defined
in include at /usr/bin/../lib64/julia/sys.so
in process_options at /usr/bin/../lib64/julia/sys.so
in _start at /usr/bin/../lib64/julia/sys.so
while loading /home/grzes/julia_sucks/Main.jl, in expression starting on line 8
Очевидно, что он не компилируется, потому что lentgh
написано с ошибками. Проблема в том, что я получил сообщение. expression starting on line 8
- это просто main()
. Джулия безнадежно не указала неверный фрагмент кода - он просто указывает на вызов main
, но ошибочная строка даже не в этом файле! Теперь представьте реальный проект, где ошибка скрывается в глубине стека вызовов. Джулия все еще не говорила ничего, кроме того, что проблема началась с точки входа в исполнение. Невозможно работать так ...
Есть ли способ заставить Джулию дать более точные сообщения?
Не полностью связан с вашим вопросом, но вы создаете анонимные функции с вашими определениями, которые обычно не очень эффективны: https://github.com/JuliaLang/julia/issues/1864. Более julian-способом будет что-то вроде 'printLength (arr) = println (length (arr))'. Это не улучшит сообщение об ошибке, просто производительность – ptb
Не то, чтобы это было важно, но код julia обычно не использует верблюд. --- подчеркивания предпочтительны. И самый код julia, который я видел, использует 'function main()', а не 'main = function()' ---, как указано выше, вы получите лучшую производительность. – tholy
Я думаю, что у меня была эта привычка писать 'f = function()' из R. У меня не было представления, что это плохая практика в Джулии. Спасибо что подметил это! –