我目前正在尝试对模块(A)进行别名,而嵌套在该模块(A.B)中的模块是否可以在线实现呢?
defmodule A do ... end
defmodule A.B do ... end
defmodule C do
alias A
alias A.B
end
答案 0 :(得分:2)
首先,在Elixir中没有 nested 模块的概念。 A.B
模块实际上与A
模块没有任何共同之处,只是将其名称用作命名空间。
但是对于深度命名的模块,您仍然要问些什么。
defmodule A do
defmodule B do
def b, do: IO.puts :b
defmodule C do
def c, do: IO.puts :c
end
end
end
对于上面的代码,在一次调用中可能同时Kernel.SpecialForms.alias/2
A.B
和A.B.C
:
alias A.{B, B.C}
#⇒ [A.B, A.B.C]
C.c
#⇒ c
Kernel.SpecialForms.require/2
,Kernel.SpecialForms.import/2
和Kernel.use/2
可以使用相同的语法。
不幸的是,使用curlies的技巧在最高级别上无效(alias {A, A.B}
无效。)也许这对Elixir内核是一个很好的PR。
答案 1 :(得分:0)
不。
A
不是Elixir中A.B
的父模块。
模块的.
仅是一个名称,您可以使用它来从字面上理解A是B的父模块。