julia: рекомендуемый способ «включать» файлы: список включений в файле верхнего уровня или вложенные включения? - PullRequest
0 голосов
/ 29 апреля 2018

Каков рекомендуемый способ 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.

1 Ответ

0 голосов
/ 08 августа 2018

Я обычно делаю:

PkgDev.generate("MyPackage", "MIT")

Это создает всю структуру папок. Я помещаю мои файлы Julia (.jl) в папку src и использую «using» для импорта функций из других файлов Julia в той же папке.

...