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_Phoenix Framework - Fatal编程技术网

Elixir 这两个模块定义之间的区别是什么?

Elixir 这两个模块定义之间的区别是什么?,elixir,phoenix-framework,Elixir,Phoenix Framework,关于Phoenix框架:我只是想知道写作和 defmodule MyApp.User do # some code end 而且 defmodule User do # some code end 稍后,编写User.function要比编写MyApp.User.function容易得多。这是为模块设置名称空间,以避免冲突。想象一下这样一个场景:您调用模块User,然后使用一个名为User的库,该库还定义了一个User模块。你会遇到碰撞 您可以在使用用户模块的模块中执行以下操作: d

关于Phoenix框架:我只是想知道写作和

defmodule MyApp.User do
  # some code
end
而且

defmodule User do
  # some code
end

稍后,编写User.function要比编写MyApp.User.function容易得多。这是为模块设置名称空间,以避免冲突。想象一下这样一个场景:您调用模块
User
,然后使用一个名为User的库,该库还定义了一个
User
模块。你会遇到碰撞

您可以在使用
用户
模块的模块中执行以下操作:

defmodule MyApp.SomeModule do
  alias MyApp.User

  def foo do
    User.some_function
  end
end

这是为您的模块命名以避免冲突。想象一下这样一个场景:您调用模块
User
,然后使用一个名为User的库,该库还定义了一个
User
模块。你会遇到碰撞

您可以在使用
用户
模块的模块中执行以下操作:

defmodule MyApp.SomeModule do
  alias MyApp.User

  def foo do
    User.some_function
  end
end

它可以应用于长生不老药的概念。通常,您希望根据特定模块的功能对其进行分组,或者只是为了方便命名。 这里是一个直接的例子,从文件

defmodule Foo do
  defmodule Bar do
  end
end
这和

defmodule Elixir.Foo do
  defmodule Elixir.Foo.Bar do
  end
  alias Elixir.Foo.Bar, as: Bar
end
需要注意的是,在Elixir中,无需定义外部模块,即可使用
外部.内部
模块名称,因为该语言会将所有模块名称翻译为原子。您可以定义任意嵌套的模块,而无需定义链中的任何模块(例如,Foo.Bar.Baz,而无需先定义Foo或Foo.Bar)


下面是一个很好的例子

它可以与长生不老药的概念结合使用。通常,您希望根据特定模块的功能对其进行分组,或者只是为了方便命名。 这里是一个直接的例子,从文件

defmodule Foo do
  defmodule Bar do
  end
end
这和

defmodule Elixir.Foo do
  defmodule Elixir.Foo.Bar do
  end
  alias Elixir.Foo.Bar, as: Bar
end
需要注意的是,在Elixir中,无需定义外部模块,即可使用
外部.内部
模块名称,因为该语言会将所有模块名称翻译为原子。您可以定义任意嵌套的模块,而无需定义链中的任何模块(例如,Foo.Bar.Baz,而无需先定义Foo或Foo.Bar)

下面是一个很好的例子