2017-02-14 18 views
1

私はBCをインポートAと呼ばれるモジュールを取得した場合:インポートには実際にモジュールが含まれていますか?

module A exposing (..) 

import B 
import C 

BをもCをインポート:

module B exposing (..) 

import C 

起こるのだろうか? importには実際にBCコードが含まれていますが、Cはコンパイル時にAの2回表示されますか?または、コンパイラは、インポートされたモジュールのメンバの各オカレンスを、AまたはBの元のコードで置き換えますか?

答えて

4

他のモジュールが参照されているモジュールの数にかかわらず、一度だけコンパイルされます。

はここで3つのファイルを取る例を示します

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コードは一度だけ含まれていました。

+0

再帰的なインポートに問題はありませんか? – Algorythmis

+1

AからのB _and_ BからAを参照しようとすると、インポートサイクルは許可されません。これはコンパイルエラーを引き起こします。 –

関連する問題