Julia Language
Moduły
Szukaj…
Składnia
- moduł moduł; ...; koniec
- za pomocą modułu
- moduł importu
Zawiń kod w module
module
kluczowego module
można użyć do uruchomienia modułu, który pozwala na uporządkowanie kodu i przestrzeni nazw. Moduły mogą definiować interfejs zewnętrzny, zazwyczaj składający się z export
symboli ed. Aby obsługiwać ten interfejs zewnętrzny, moduły mogą mieć nieobsługiwane funkcje wewnętrzne i typy nieprzeznaczone do użytku publicznego.
Niektóre moduły istnieją przede wszystkim do zawijania typu i powiązanych funkcji. Takie moduły, zgodnie z konwencją, są zwykle nazywane liczbą mnogą nazwy typu. Na przykład, jeśli mamy moduł zapewniający typ Building
, możemy nazwać taki moduł Buildings
.
module Buildings
immutable Building
name::String
stories::Int
height::Int # in metres
end
name(b::Building) = b.name
stories(b::Building) = b.stories
height(b::Building) = b.height
function Base.show(io::IO, b::Building)
Base.print(stories(b), "-story ", name(b), " with height ", height(b), "m")
end
export Building, name, stories, height
end
Moduł może być następnie używany z instrukcją using
:
julia> using Buildings
julia> Building("Burj Khalifa", 163, 830)
163-story Burj Khalifa with height 830m
julia> height(ans)
830
Używanie modułów do organizowania pakietów
Zazwyczaj pakiety składają się z jednego lub więcej modułów. W miarę wzrostu liczby pakietów przydatne może być zorganizowanie głównego modułu pakietu w mniejsze moduły. Powszechnym idiomem jest definiowanie tych modułów jako podmodułów modułu głównego:
module RootModule
module SubModule1
...
end
module SubModule2
...
end
end
Początkowo ani moduł główny, ani podmoduły nie mają dostępu do eksportowanych przez siebie symboli. Jednak w celu rozwiązania tego problemu obsługiwane są importy względne:
module RootModule
module SubModule1
const x = 10
export x
end
module SubModule2
# import submodule of parent module
using ..SubModule1
const y = 2x
export y
end
# import submodule of current module
using .SubModule1
using .SubModule2
const z = x + y
end
W tym przykładzie wartość RootModule.z
wynosi 30
.