Sök…


Syntax

  • modul modul; ...; slutet
  • med modul
  • importmodul

Packa in kod i en modul

module nyckelord kan användas för att starta en modul, som gör det möjligt att organisera och köra namnkod. Moduler kan definiera ett externt gränssnitt, vanligtvis bestående av export ed-symboler. För att stödja detta externa gränssnitt kan moduler ha icke-exporterade interna funktioner och typer som inte är avsedda för allmän användning.

Vissa moduler finns främst för att radera in en typ och tillhörande funktioner. Sådana moduler benämns vanligtvis med pluralform av typens namn enligt konvention. Om vi till exempel har en modul som tillhandahåller en Building , kan vi kalla en sådan 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

Modulen kan sedan användas med det using uttalandet:

julia> using Buildings

julia> Building("Burj Khalifa", 163, 830)
163-story Burj Khalifa with height 830m

julia> height(ans)
830

Använda moduler för att organisera paket

Vanligtvis består paket av en eller flera moduler. När paket växer kan det vara bra att organisera paketets huvudmodul i mindre moduler. Ett vanligt formspråk är att definiera dessa moduler som undermoduler för huvudmodulen:

module RootModule

module SubModule1

...

end

module SubModule2

...

end

end

Ursprungligen har varken rotmodul eller undermoduler åtkomst till varandras exporterade symboler. Relativ import stöds emellertid för att lösa problemet:

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

I det här exemplet är värdet på RootModule.z 30 .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow