Каков рекомендуемый способ include
всех файлов для вашего проекта?
Я видел много примеров, в которых используется похожая структура: упорядоченный список include
операторов в одном файле верхнего уровня (файл, который определяет Module
, или «основной» файл в приложении).
Это также, кажется, вывод в следующей теме:
https://discourse.julialang.org/t/best-practices-for-structuring-larger-projects/2652?u=nhdaly
Однако Lint.jl
, похоже, очень недоволен такой структурой проекта, жалуясь на постоянные use of undeclared symbol
s.
Рассмотрим следующий пример:
# --- src/lib1.jl ---
struct MyStruct
x::Int32
end
# --- src/lib2.jl ---
foo() = MyStruct(3) # Lint.jl says: E321 MyStruct: use of undeclared symbol
# --- src/MyPackage.jl ---
module MyPackage
include("lib1.jl")
include("lib2.jl")
foo()
end
Конечно, этот код будет работать правильно, потому что MyStruct
будет доступен до компиляции lib2.jl
. Но Lint.jl
не может этого знать. Даже при использовании встроенного в Atom linter
выдает ту же ошибку.
Так желательно ли иметь lib2.jl include("lib1.jl")
вместо всех включений в верхнем файле? Или лучше разместить их в обоих местах, как вы могли бы для C++
заголовков? Я нигде не видел однозначной рекомендации по этому поводу, и я бы хотел, чтобы кто-нибудь ее дал! :)
РЕДАКТИРОВАТЬ: изменены имена файлов, чтобы отразить более типичную структуру каталогов julia.