以下代码是否等效?作为调用模块的方法,在这两种情况下,人会用Utilities.StringUtils.some_method(...)
Elixir:带点和嵌套模块的模块名称 - 它们是否相等?
嵌套模块
defmodule Utilities do
defmodule StringUtils do
end
end
模块与点的名称
defmodule Utilities.StringUtils do
end
以下代码是否等效?作为调用模块的方法,在这两种情况下,人会用Utilities.StringUtils.some_method(...)
Elixir:带点和嵌套模块的模块名称 - 它们是否相等?
嵌套模块
defmodule Utilities do
defmodule StringUtils do
end
end
模块与点的名称
defmodule Utilities.StringUtils do
end
是和否。的第一个定义自动定义基于模块名称的别名:
defmodule Utilities do
defmodule StringUtils do
end
# Can access the module as StringUtils
end
虽然第二:
比defmodule Utilities.StringUtils do
# Cannot access the module as StringUtils
end
其他,通过两者定义的代码和模块是完全一样的。
是,两者都精确地转换为符号(在Erlang一个模块被它的符号引用):
:"Elixir.Utilities.StringUtils"
在Erlang中没有真正嵌套的模块,它只是Elixir模拟的东西。
感谢您的回答 - 我想您的意思是“Atom”,当您提到'符号' –