Julia Language
modules
Zoeken…
Syntaxis
- module module; ...; einde
- met behulp van module
- importmodule
Wrap code in een module
De module
zoekwoord kan worden gebruikt om een module, die het mogelijk maakt de code te worden georganiseerd en naamruimten beginnen. Modules kunnen een externe interface definiëren, meestal bestaande uit export
symbolen. Ter ondersteuning van deze externe interface kunnen modules niet-geëxporteerde interne functies en typen hebben die niet bedoeld zijn voor openbaar gebruik.
Sommige modules bestaan voornamelijk om een type en bijbehorende functies in te pakken. Zulke modules worden gewoonlijk genoemd met de meervoudsvorm van de naam van het type. Bijvoorbeeld, als we een module die een biedt Building
soort, we kunnen een dergelijke module noemen 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
De module kan dan worden gebruikt in combinatie met het using
statement:
julia> using Buildings
julia> Building("Burj Khalifa", 163, 830)
163-story Burj Khalifa with height 830m
julia> height(ans)
830
Modules gebruiken om pakketten te organiseren
Gewoonlijk bestaan pakketten uit een of meer modules. Naarmate pakketten groeien, kan het handig zijn om de hoofdmodule van het pakket in kleinere modules te organiseren. Een gemeenschappelijk idioom is om die modules te definiëren als submodules van de hoofdmodule:
module RootModule
module SubModule1
...
end
module SubModule2
...
end
end
Aanvankelijk hebben noch de rootmodule noch de submodules toegang tot elkaars geëxporteerde symbolen. Relatieve invoer wordt echter ondersteund om dit probleem aan te pakken:
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 dit voorbeeld is de waarde van RootModule.z
30
.