Julia Language
Modules
Recherche…
Syntaxe
- module module; ...; fin
- en utilisant le module
- Module d'importation
Wrap Code dans un module
Le mot-clé du module
peut être utilisé pour démarrer un module, ce qui permet d’organiser le code et d’en placer les noms. Les modules peuvent définir une interface externe, généralement composée de symboles ed export
. Pour prendre en charge cette interface externe, les modules peuvent avoir des fonctions internes non exportées et des types non destinés à un usage public.
Certains modules existent principalement pour envelopper un type et des fonctions associées. Ces modules, par convention, sont généralement nommés avec la forme plurielle du nom du type. Par exemple, si nous avons un module qui fournit un type de Building
, nous pouvons appeler un tel module 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
Le module peut alors être utilisé avec l'instruction using
:
julia> using Buildings
julia> Building("Burj Khalifa", 163, 830)
163-story Burj Khalifa with height 830m
julia> height(ans)
830
Utilisation de modules pour organiser les packages
En règle générale, les packages se composent d'un ou de plusieurs modules. À mesure que les paquets grandissent, il peut être utile d’organiser le module principal du package en modules plus petits. Un idiome commun consiste à définir ces modules en tant que sous-modules du module principal:
module RootModule
module SubModule1
...
end
module SubModule2
...
end
end
Initialement, ni le module racine ni les sous-modules n’ont accès aux symboles exportés les uns des autres. Cependant, les importations relatives sont prises en charge pour résoudre ce problème:
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
Dans cet exemple, la valeur de RootModule.z
est 30
.