Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 是否有根长生不老药模块?_Elixir - Fatal编程技术网

Elixir 是否有根长生不老药模块?

Elixir 是否有根长生不老药模块?,elixir,Elixir,当我在Elixir中定义一个模块并在IEX中对其执行类似的to_string操作时 MyModule>to_字符串 我会得到结果的 “Elixir.MyModule” 是否有一个根级别的Elixir模块供所有其他模块使用?为什么有一个长生不老药前缀看起来像另一个模块 说它是一个名称空间,但我读过其他文章说Elixir不支持名称空间。我相信这是为了在Elixir和Erlang模块之间做出区别。所有elixir模块都以elixir前缀开头。 MyModule只是atom的别名:“Elixir.MyM

当我在Elixir中定义一个模块并在IEX中对其执行类似的
to_string
操作时

MyModule>to_字符串

我会得到结果的

“Elixir.MyModule”

是否有一个根级别的
Elixir
模块供所有其他模块使用?为什么有一个长生不老药前缀看起来像另一个模块


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

我相信这是为了在Elixir和Erlang模块之间做出区别。所有elixir模块都以
elixir
前缀开头。
MyModule
只是atom的别名:“Elixir.MyModule”:

标准函数调用:

iex(2)> MyModule.f()
"MyModule.f()"
iex(3)> :"Elixir.MyModule".f()
"MyModule.f()"
Erlang风格函数调用:

iex(2)> MyModule.f()
"MyModule.f()"
iex(3)> :"Elixir.MyModule".f()
"MyModule.f()"
原子等于别名吗

iex(4)> :"Elixir.MyModule" == MyModule
true
iex(5)> :"Elixir.MyModule" == Elixir.MyModule
true
Elixir
前缀是为了方便:

iex(6)> MyModule == Elixir.MyModule
true
在“Programming Elixir 1.6”中,Dave Thomas给出了以下示例:


除雾模块​ 外面的​做​
​  ​除雾模块​ 内部的​做​
​​      def​ 内函数​做​
​​      结束​
​​  结束​
​ 
​​  def​ 外函数​做​
​Inner.Inner_func
​​  结束​
​​结束​
​
​Outer.Outer_func
​外.内.内函数

他接着解释说:

“Elixir中的模块嵌套是一种错觉,所有模块都是在顶层定义的。当我们在另一个模块中定义一个模块时,Elixir只需在外部模块名和内部模块名之间加上一个点。这意味着我们可以直接定义嵌套模块。”

侧注:Elixir确实支持名称空间(如果我们使用的是“名称空间”的常见含义。)