有根Elixir模块吗?

Aud*_*dus 3 elixir

当我在Elixir中定义模块并to_string在IEX中像这样对它执行操作时

MyModule |> to_string

我会得到结果的,

"Elixir.MyModule"

是否存在Elixir其他所有模块都驻留的根级别模块?为什么会有看起来像另一个模块的Elixir前缀?

这个网站说这是一个名称空间,但是我读过其他文章说Elixir不支持名称空间。

Gry*_*ych 5

我相信这是为了使Elixir和Erlang模块有所不同。所有elixir模块均以Elixir前缀开头。 MyModule只是一个原子的别名:"Elixir.MyModule"

iex(1)> defmodule MyModule, do: def f(), do: "MyModule.f()"
Run Code Online (Sandbox Code Playgroud)

标准函数调用:

iex(2)> MyModule.f()
"MyModule.f()"
Run Code Online (Sandbox Code Playgroud)

Erlang样式的函数调用:

iex(3)> :"Elixir.MyModule".f()
"MyModule.f()"
Run Code Online (Sandbox Code Playgroud)

原子等于别名吗?

iex(4)> :"Elixir.MyModule" == MyModule
true
iex(5)> :"Elixir.MyModule" == Elixir.MyModule
true
Run Code Online (Sandbox Code Playgroud)

Elixir 前缀是为了方便:

iex(6)> MyModule == Elixir.MyModule
true
Run Code Online (Sandbox Code Playgroud)