ヽ(´・肉・`)ノログ

How do we fighting without fighting?

Elixirでトップレベルのモジュール名を明示する

Elixirでトップレベルのモジュール名を明示するには Elixir を接頭辞につける. Rubyでトップレベルのモジュール名を ::Foo と記述するのと同じようなものだ.

下記のコード Bar.do_it の中で Foo と書くと

トップレベルにある Foo のことを呼びたい場合は Elixir.Foo と書くとよい.

defmodule Foo do
  def do_something do
    "do_something"
  end
end


defmodule Bar do
  defmodule Foo do
    def do_anything do
      "do_anything"
    end
  end

  def do_it do
    # Foo.do_something
    # と書いて実行すると以下のようなエラーが表示される
    #>  ** (UndefinedFunctionError) function Bar.Foo.do_something/0 is undefined or private. Did you mean one of:
    #>
    #>        * do_anything/0
    #>
    #>      Bar.Foo.do_something()
    #>      orgmode_elixir_src.exs:16: Bar.do_it/0
    #>      (elixir) lib/code.ex:363: Code.require_file/2
    Elixir.Foo.do_something
  end
end

IO.puts Bar.do_it

公式 Getting Started の alias, require and import - Elixir にも

All modules defined in Elixir are defined inside a main Elixir namespace. However, for convenience, you can omit “Elixir.” when referencing them.

(訳:Elixirで定義された全てのモジュールはElixirという名前空間の中にある.しかし,便利なように,参照するときに”Elixir”と書かなくてもよい」)と, トップレベルは Elixir であることが書いてある.

このエントリーをはてなブックマークに追加