無論有多少個模塊被引用,它只會被編譯一次。
下面是一個有三個文件的示例:
A.elm
module A exposing (..)
import B
import C
a : String
a =
"Hi from A!\n" ++ B.b ++ "\n" ++ C.c
B.elm
module B exposing (..)
import C
b : String
b =
"Hi from B!\n" ++ C.c
C.elm
module C exposing (..)
c : String
c =
"Hi from C!"
產生的transpiled的JavaScript看起來像這樣(你產生JS可能會有所不同):
var _user$project$C$c = 'Hi from C!';
var _user$project$B$b = A2(_elm_lang$core$Basics_ops['++'], 'Hi from B!\n', _user$project$C$c);
var _user$project$A$a = A2(
_elm_lang$core$Basics_ops['++'],
'Hi from A!\n',
A2(
_elm_lang$core$Basics_ops['++'],
_user$project$B$b,
A2(_elm_lang$core$Basics_ops['++'], '\n', _user$project$C$c)));
正如你所看到的,C.elm
代碼只包含一次。
因此,遞歸導入沒有問題嗎? – Algorythmis
如果您嘗試從A的B _and_ B引用A,則不允許導入循環。這會給您一個編譯錯誤。 –