簡體   English   中英

傘編譯期間未定義的功能警告

[英]Undefined function warnings during umbrella compilation

我在傘形應用程序結構中遇到了一個奇怪的問題。 在運行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的/ lib文件夾中定義,則其余的應用程序應該可以使用該函數。

有誰知道如何擺脫警告,更重要的是-解釋它嗎? :)

我相信您在B使用了A中的宏,反之亦然。 Elixir編譯器按順序構建模塊,這是將所有宏擴展為實際AST所必需的。 在一個應用程序中,交叉依賴甚至可能破壞構建。

但是,當兩個應用程序具有交叉依賴關系時,Elixir編譯器將假定該函數在滿足依賴關系並構建所有內容並將錯誤降級為警告后可能可用。

要消除此警告,如果絕對肯定, 則確實定義了這樣的函數,請使用Kernel.apply/3而不是顯式調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM