😀
Juliaでのモジュール拡張 インポート方法での違い
はじめに
公式ドキュメントのModuleページを参照しています。
拡張のためのモジュールインポートで大事なこと
モジュールをインポートする方法はusingとimportです。
これらの違いは、extendできるかどうかにあります。
extendとは
extendは、そのモジュールをもとにして別のメソッドを付け加えることを言います。
Base.showというBaseのモジュールをもとにする場合、
import Base.show
と書く必要があります。
using Base
と書いた場合は、Base.showとして指定してあげることで、拡張ができるようです。
using Base.show
では拡張できません。
疑問点
公式ドキュメントを読むと
using BigLib: thing1, thing2
は拡張できない書き方です。このthing1、thing2はメソッドと解釈していいのかどうかがわかりません。
using Base: show
と書くとusing Base.showと同義なのでしょうか。
Discussion
用語の(たぶんちょっとだけより正確な)説明。
Julia では
Base.show()などは「関数」です。関数は引数の組合せ(=シグニチャ)ごとに実行される実体が変わります(多重ディスパッチ)が、Julia ではその各実体のことを指して「メソッド」と呼んでいます。
関数の「拡張」というのは、関数に「メソッドを追加」すること、というワケです。
以上の説明から、もしこの
thing1thing2がそのモジュール内で関数として定義されていれば、それは関数です。名前で参照できるものはあくまで関数です。プログラマはメソッドを意識する必要は通常はありません(しかるべき引数を与えたときに Julia が内部で選択して実行する実体がメソッドなので)。同義です。
using Xxxx: f, ...は、カンマ区切りで複数並べて指定出来るだけで、1つだけ指定することも別に普通にできてその場合はusing Xxxx.fと全く同じ意味になります。importも同じです。しっくりきました。
また、疑問点についてもお答えいただきありがとうございました。