LoginSignup
5
2

More than 1 year has passed since last update.

juliaのimportとusingの違い

Posted at

juliaのimportとusingの違いについて

juliaを初めて触った頃に、importとusingの違いがわからずモヤモヤしていた時期が続いたので、備忘録として違いについてまとめる。

以下のコードを例にする。

module MyPkg
    export greet
    export another
    greet() = println("greet with no args")
    another() = println("これは邪魔者です")
end

実行

#ドット.は自前のモジュールの場所を表す。
using .MyPkg # greet, another が見える
# これは、exportをつけているからである。

using .MyPkg:greet # greet は見える, another は見えない
using .MyPkg:MyPkg # MyPkg.greet でアクセスできる
import .MyPkg # using .MyPkg:MyPkg とほぼ同じ

usingを使えば、exportしている関数はusing .MyPkgをするだけで呼び出すことができる。例えば、以下のような感じである。

julia> using .MyPkg

julia> greet()
greet with no args

一方、import .MyPkgは、exportの有無関係なく、MyPkg.function()がなければいけない。

julia> import .MyPkg

julia> greet()
ERROR: UndefVarError: greet not defined
Stacktrace:
 [1] top-level scope
   @ REPL[3]:1

julia> MyPkg.greet()
greet with no args

特定の関数を呼び出したければ、import/using .MyPkg:function とする。

using .MyPkg:greet # greet は見える, another は見えない

とりあえずパッケージで遊んでみたいときは、usingを使えば良さそうである。そうすればexportしている関数は、function()だけで使うことができる。

usingを使う時に注意点として、どんな名前の関数が呼び出されているかわからないので、自分のパッケージで定義された関数と名前が衝突してしまうことである。
従って、その問題を回避するためには、importを使うのが無難だろう。

参考

こちらの記事も一緒に読むと理解が深まりました。
https://qiita.com/cometscome_phys/items/5c98aef4c10a8a575f81

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2