2017-04-08 13 views

答えて

7

Elmに説明されていない魔法はあまりありませんが、1ビットは型と型のエイリアスコンストラクタです。型(エイリアス)を作成するたびに、自由にコンストラクタ関数が得られます。だから、あなたの例を使用して、

type alias Model = 
    { dieFace : Int 
    } 

あなたは(やや奇妙に見える)コンストラクタ関数を無料で

Model : Int -> Model 

を与えます。レコードにこのようなエントリを追加すると、

type alias Model = 
    { dieFace : Int 
    , somethingElse : String 
    } 

コンストラクタ関数はより多くの引数をとります。

Model : Int -> String -> Model 

これらの順序は、レコードエントリと同じ順序なので、あなたがあなたのタイプの別名の順序を変更する場合は、コンストラクタ関数への引数の順序を変更する必要があります。

ユニオンタイプも同様に動作します。

type Shape 
    = Circle Int 
    | Square Int Int 

は静かにコンストラクタを作成します。

Circle: Int -> Shape 
Square : Int -> Int -> Shape 
+0

すばらしい答え。ありがとう。 – Rich

3

Model 1位置レコードコンストラクタとして「モデル」が使用されます。これは、他の例{dieFace = 1}ここ


に等しい:

type alias Rcd = 
    { first : String 
    , second : Int 
    } 
RCDは、2つの方法で構築することができる

Rcd "some string" 4 
{ first = "some string" , second = 4} 

前者変異体は単に速記であり、多くの場合、初期化のために使用レコードの。

+0

だから私はちょうどレコードはJavaScriptでのオブジェクトとは異なり、そのデータの順序を保証することを意味するものであろうと、確認しましょうか? – Rich

+0

はい、コンストラクタを使用するときに行います。構築に{}表記を使用すると、順序は関係ありません。順序は、一致するレコードをパターン化する場合(たとえば、文または関数属性の場合)にも関係します。 – farmio

関連する問題