Jeden z projektów, nad którymi pracuję, ma cztery różne moduły (Foo
, Bar
, Baz
i Plotting
) i mam za zadanie połączenie ich w pakiet. Jest to dość proste w Julię, aby nowy pakiet:Czy mogę utworzyć pakiet Julia zawierający wiele modułów, które można niezależnie importować?
julia> Pkg.generate("MyPackage", "MIT")
skopiowane moje moduły do ~/.julia/v0.3/MyPackage/src/
i dodaną zawierać oświadczenia do MyPackage.jl
. Wygląda to mniej więcej tak:
module MyPackage
include("foo.jl")
include("bar.jl")
include("baz.jl")
include("plotting.jl")
end
Każdy dołączony plik zawiera odpowiedni moduł.
Moim głównym problemem z tym jest Plotting
trwa zawsze importować i to nie jest potrzebne bardzo często, gdy używamy resztę MyPackage
. Naprawdę chciałbym móc zrobić coś takiego, jak using MyPackage.Foo
, aby uzyskać tylko Foo
(a szczególnie w celu wykluczenia Plotting
i jego wolnego czasu importu). Próbowałem kilka różnych podejść do tego, jak układam rzeczy, w tym o submodułach wyraźnie zdefiniowanych wewnątrz MyPackage.jl
zamiast w każdym pliku indywidualnie, ale bez względu na to, co próbuję, zawsze mam opóźnienie ładowania od Plotting
.
Czy można zbudować pakiet, aby można było niezależnie od niego ładować moduły? a jeśli tak, to w jaki sposób?
Uwaga: Jestem nowy w stosunku do Julii i wciąż jeszcze nie buduję pakietów. Przepraszam, jeśli któraś z moich semantyki jest zła lub coś jest niejasne.
Dla wszystkich zainteresowanych w sposób bardziej szczegółowy, '@ lazymod' jest makro w' Requires.jl' że opóźnia import module, dopóki nie zostanie właściwie wykorzystane, jednak zmienia także składnię wywołania modułu. Choć nie jest to najbardziej eleganckie rozwiązanie, z pewnością przydaje się do przyspieszenia importu, aż do momentu, w którym naprawdę będę musiał knuć spisek. Dzięki! – harts12
Wygląda na to, że w najnowszej wersji 'Requ.jl' funkcja' @Lazymod' została usunięta ... – harts12