什么时候在 elixir 模块名称中使用点?
When to use a dot in elixir module name?
我见过这样命名的 elixir 模块:
defmodule Foo.bar.baz do
end
但我找不到任何说明何时执行此操作的文档。
跟子目录有关系吗?使用 mix,我可以将我的模块放在 lib 文件夹中的子目录中,它们可以正常工作而没有点。
例如:
# this is in /lib/foo/bar
defmodule Bar do
end
约定是什么?
.
没什么特别的。你可以给模块起任何你想要的名字,只要它是一个有效的原子,包括例如空格:
iex(1)> defmodule :"hello world!!!" do
...(1)> def hi, do: :ok
...(1)> end
iex(2)> :"hello world!!!".hi
:ok
您也不需要将模块命名为与它们所在的 file/folder 相同的名称。您可以在 lib
内的任何 .ex
文件中定义任何模块,并且它们'将对整个应用程序和 iex
.
可用
惯例,如果文件在顶层声明单个模块,则根据其路径命名它,不包括 lib
,将每个路径段转换为大写。例如,lib/foo/bar/baz.ex
通常定义一个名为 Foo.Bar.Baz
.
的模块
惯例只是将你的 application/package 中的所有模块命名为 MyApp.MyModule
(假设你的 application/package 被命名为 MyApp
。)这或多或少类似于 java 包命名约定 com.example.blah...
.
这样做是为了防止不同 applications/packages.
之间的名称冲突
Elixir 核心模块没有命名空间(但也有一些例外,例如 String.Chars
。)
在您的 application/package 中,选择模块命名的平面模型还是分层模型完全取决于您。
顺便说一句,模块名称可以是任何有效的原子。点只是约定,它既不影响编译器的模式可访问性,也不影响其他任何东西。 Module.concat/{1,2}
助手使用点来构建模块名称,但这只是约定。
我见过这样命名的 elixir 模块:
defmodule Foo.bar.baz do
end
但我找不到任何说明何时执行此操作的文档。
跟子目录有关系吗?使用 mix,我可以将我的模块放在 lib 文件夹中的子目录中,它们可以正常工作而没有点。
例如:
# this is in /lib/foo/bar
defmodule Bar do
end
约定是什么?
.
没什么特别的。你可以给模块起任何你想要的名字,只要它是一个有效的原子,包括例如空格:
iex(1)> defmodule :"hello world!!!" do
...(1)> def hi, do: :ok
...(1)> end
iex(2)> :"hello world!!!".hi
:ok
您也不需要将模块命名为与它们所在的 file/folder 相同的名称。您可以在 lib
内的任何 .ex
文件中定义任何模块,并且它们'将对整个应用程序和 iex
.
惯例,如果文件在顶层声明单个模块,则根据其路径命名它,不包括 lib
,将每个路径段转换为大写。例如,lib/foo/bar/baz.ex
通常定义一个名为 Foo.Bar.Baz
.
惯例只是将你的 application/package 中的所有模块命名为 MyApp.MyModule
(假设你的 application/package 被命名为 MyApp
。)这或多或少类似于 java 包命名约定 com.example.blah...
.
这样做是为了防止不同 applications/packages.
之间的名称冲突Elixir 核心模块没有命名空间(但也有一些例外,例如 String.Chars
。)
在您的 application/package 中,选择模块命名的平面模型还是分层模型完全取决于您。
顺便说一句,模块名称可以是任何有效的原子。点只是约定,它既不影响编译器的模式可访问性,也不影响其他任何东西。 Module.concat/{1,2}
助手使用点来构建模块名称,但这只是约定。