当我在Elixir中定义模块并to_string在IEX中像这样对它执行操作时
MyModule |> to_string
我会得到结果的,
"Elixir.MyModule"
是否存在Elixir其他所有模块都驻留的根级别模块?为什么会有看起来像另一个模块的Elixir前缀?
这个网站说这是一个名称空间,但是我读过其他文章说Elixir不支持名称空间。
我相信这是为了使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)
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |