サーチ…


構文

  • モジュールモジュール; ...;終わり
  • モジュールを使用して
  • インポートモジュール

モジュール内のコードをラップする

moduleキーワードを使用してモジュールを始めることができます。これにより、コードを整理して名前空間に入れることができます。モジュールは外部インタフェースを定義することができ、通常はexportシンボルで構成されます。この外部インターフェイスをサポートするために、モジュールがアンエクスポート内部持つことができる機能種類の公共の使用を目的としません。

いくつかのモジュールは、主に型と関連する関数をラップするために存在します。このようなモジュールは、通常、型名の複数形で命名されます。たとえば、 Building型を提供するモジュールがある場合、そのようなモジュール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

モジュールは、 usingステートメントで使用できます。

julia> using Buildings

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

julia> height(ans)
830

モジュールを使用したパッケージの整理

通常、 パッケージは1つまたは複数のモジュールで構成されます。パッケージが大きくなるにつれて、パッケージのメインモジュールをより小さなモジュールに編成すると便利です。一般的なイディオムは、これらのモジュールをメインモジュールのサブモジュールとして定義することです。

module RootModule

module SubModule1

...

end

module SubModule2

...

end

end

当初、ルートモジュールもサブモジュールも互いのエクスポートシンボルにアクセスすることはできません。ただし、この問題に対処するために、相対的なインポートがサポートされています。

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

この例では、 RootModule.zの値は30です。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow