や、言語関係など覚えたいもの、覚えるべきものはたくさんある一方で、注目が集まっているから、やってみたい。ということでプログラミング言語としてのを学んでいく。
前回
2. Juliaの言語機能
2.7 モジュール
ソースコードの名前が衝突することを防ぐのに、名前空間を用いる。のパッケージはそれぞれが名前空間を持つ。
2.7.1 モジュールの機能
には、名前空間として機能するモジュールというオブジェクトがある。あるモジュールの名前空間に所属する名前は、モジュール名を通じて参照する。
のコードは、常にモジュールに関連づいた名前空間の中で実行される。現在の実行位置でどのモジュールが有効になっているかは@____マクロで確認できる。
@__MODULE__
2.7.3 既存モジュールの利用
既存モジュールを利用するには、文を用いるのが一般的である。
文は特定の名前を指定してそれのみ読み込むこともできる。そのときには:(コロンを付記)の後に取り込みたい関数を記載する。
文は特定の名前を指定しないと、暗黙的に意図しないものが読み込まれる恐れがある。そのため、暗黙的に名前を読み込まない文を用いることも一考の余地がある。
using Statistics mean([1,2,3]) std(1,2,3)
2.7.4 新しいモジュールの定義
モジュールを新たに定義することもできる。キーワードとキーワードでモジュールのコードを挟む。このとき、慣例で両キーワードに挟まれたモジュールのコードにはインデントを入れない。
# module (モジュール名) # … # モジュールのコード # … # end module Greeting hello(name) = println("Hello, $(name)") end Greeting.hello("Julia") # モジュールの定義は入れ子にできる # モジュールの定義は入れ子にできる module A hello(name) = println("Good morning, $(name)") module B1 # A.B1モジュール hello(name) = println("Hi, $(name)") end module B2 # A.B2モジュール hello(name) = println("Good evening, $(name)") end end # using文やimport文で指定されたモジュール名は、LOAD_PATH変数に収められたプロジェクト・パスから検索される ### module文で定義されたモジュールはそこに無いため、エラーを起こす。 ### そこで.を付けて相対パスで指定する using A A.hello("Julia") using .A A.hello("Julia") using .A A.B1.hello("Julia")