首页 文章

伞式编译期间未定义的功能警告

提问于
浏览
0

我的伞形应用程序结构中遇到了一个奇怪的问题 . 当我在运行 mix clean 命令后编译整个项目时,我收到来自application_a的警告消息:

function ApplicationB.ModuleName.function_name/0 is undefined (module 
ApplicationB.ModuleName is not available)
  lib/file_name.ex:13`

问题在于模块在那里, ApplicationB.ModuleName.function_name/0 被定义并且它在交互式shell中从伞形层运行项目,一切正常,我可以手动调用该函数并且它按预期工作 . 我一直在尝试进行研究,据我所知,ApplicationB的功能应该可用于ApplicationA,因为两者都在同一个伞中,并且不需要将它们添加到deps列表中 . 如果函数在application_b的my / lib文件夹中定义,则应该可以将其他应用程序使用 .

有没有人知道如何摆脱警告,更重要的是 - 解释一下? :)

1 回答

  • 2

    我相信你在 B 中使用 A 的宏,反之亦然 . Elixir编译器按顺序构建模块,将所有宏扩展到实际AST . 在一个应用程序中,交叉依赖性甚至可能会破坏构建 .

    但是当两个应用程序具有交叉依赖关系时,Elixir编译器会假设在满足依赖关系并且所有内容都已构建且错误降级为警告之后该函数可能变得可用 .

    要摆脱这个警告,如果你是绝对肯定的,确实有这样的函数定义,使用Kernel.apply/3而不是显式调用 .

相关问题