这两个模块定义有什么区别?
What is the difference between these two module definitions?
关于Phoenix Framework:我只是想知道写法有什么区别
defmodule MyApp.User do
# some code
end
而且只是
defmodule User do
# some code
end
以后写 User.function 比写 MyApp 更容易。User.function
这是为您的模块命名空间以避免冲突。想象一个场景,你调用你的模块 User
然后使用一个名为 user 的库,它也定义了一个 User
模块。你会发生碰撞。
您可以 alias 在使用您的 User
模块的模块中:
defmodule MyApp.SomeModule do
alias MyApp.User
def foo do
User.some_function
end
end
可以配合elixir中nesting的概念来应用。通常您希望根据功能或只是为了命名方便对某些模块进行分组。
这是文档中的直接示例
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 中,不需要定义 Outer 模块就可以使用 Outer.Inner
模块名称,因为语言翻译了所有无论如何,模块名称都是原子的。您可以定义任意嵌套的模块而无需定义链中的任何模块(例如,Foo.Bar.Baz 无需首先定义 Foo 或 Foo.Bar)。
elixir docs 提供了一个可靠的示例。
关于Phoenix Framework:我只是想知道写法有什么区别
defmodule MyApp.User do
# some code
end
而且只是
defmodule User do
# some code
end
以后写 User.function 比写 MyApp 更容易。User.function
这是为您的模块命名空间以避免冲突。想象一个场景,你调用你的模块 User
然后使用一个名为 user 的库,它也定义了一个 User
模块。你会发生碰撞。
您可以 alias 在使用您的 User
模块的模块中:
defmodule MyApp.SomeModule do
alias MyApp.User
def foo do
User.some_function
end
end
可以配合elixir中nesting的概念来应用。通常您希望根据功能或只是为了命名方便对某些模块进行分组。 这是文档中的直接示例
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 中,不需要定义 Outer 模块就可以使用 Outer.Inner
模块名称,因为语言翻译了所有无论如何,模块名称都是原子的。您可以定义任意嵌套的模块而无需定义链中的任何模块(例如,Foo.Bar.Baz 无需首先定义 Foo 或 Foo.Bar)。
elixir docs 提供了一个可靠的示例。