我尝试创建一个没有config.exs
的混合项目,所以我创建了文件。
我从一个凤凰项目中引用了config.exs
。
我看到config.exs
没有模块定义。我尝试在.ex
文件中声明一个独立函数,它按预期引发了错误
** (ArgumentError) cannot invoke def/2 outside module
然后我假设.exs
可以不带defmodule
而被写入,然后我看到mix.exs
具有模块定义。为什么会这样呢?
我的问题,为什么config.exs
不用模块定义,而mix.exs
带有定义?
何时在.exs
中使用defmodule,何时不使用?
config.exs
没有模块定义,但是您可以注意到它具有:
use Mix.Config
如果您从混合中查看config.ex的源代码,您会注意到:
defmodule Mix.Config do
以及使用宏的定义:
use宏通常用作扩展点。这意味着那,当您使用模块FooBar时,您允许该模块注入当前模块中的任何代码,例如导入自身或其他模块,定义新功能,设置模块状态等]
基本上,您将模块插入脚本并使用自定义配置设置修改内容,因此config.exs
的模块为Mix.Config
。