Julia Language
Module
Suche…
Syntax
- Modul Modul; ... Ende
- unter Verwendung des Moduls
- Modul importieren
Code in ein Modul einschließen
Das module
kann verwendet werden, um ein Modul zu beginnen, mit dem Code organisiert und Namespaces erstellt werden kann. Module können eine externe Schnittstelle definieren, die typischerweise aus export
Symbolen besteht. Um diese externe Schnittstelle zu unterstützen, können Module nicht exportierte interne Funktionen und Typen aufweisen, die nicht für die öffentliche Verwendung bestimmt sind.
Einige Module existieren hauptsächlich, um einen Typ und zugehörige Funktionen zu umschließen. Solche Module werden normalerweise durch die Pluralform des Namens des Typs benannt. Wenn wir beispielsweise ein Modul haben, das einen Building
bereitstellt, können wir ein solches Modul 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
Das Modul kann dann mit der using
Anweisung verwendet werden:
julia> using Buildings
julia> Building("Burj Khalifa", 163, 830)
163-story Burj Khalifa with height 830m
julia> height(ans)
830
Verwenden von Modulen zum Verwalten von Paketen
In der Regel bestehen Pakete aus einem oder mehreren Modulen. Wenn Pakete größer werden, kann es sinnvoll sein, das Hauptmodul des Pakets in kleinere Module zu organisieren. Eine gängige Redewendung ist das Definieren dieser Module als Submodule des Hauptmoduls:
module RootModule
module SubModule1
...
end
module SubModule2
...
end
end
Anfangs haben weder das Wurzelmodul noch die Submodule Zugriff auf die exportierten Symbole der jeweils anderen. Es werden jedoch relative Importe unterstützt, um dieses Problem zu beheben:
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
In diesem Beispiel beträgt der Wert von RootModule.z
30
.