2017-07-08 3 views
2

ArmstrongのErlangの本から対話型シェルでサンプルコードを実行しようとしています。これは、どのような本はそうであると言うされています。しかし、これは私は貝になってるものですErlangでマップとパターンマッチングしたときの不正な表現

1> Henry8 = #{ class => king, born => 1491, died => 1547 }. #{ born => 
1491, class=> king, died => 1547 }. 
2> #{ born => B } = Henry8. 
#{ born => 1491, class=> king, died => 1547 }. 

、それはパターンマッチングが失敗しているようだ:

1> Henry8 = #{ class => king, born => 1491, died => 1547 }. 
#{born => 1491,class => king,died => 1547} 
2> #{ born => B } = Henry8. 
* 1: illegal pattern 

答えて

4

=>構築するためのものです地図。マップのパターンを一致させるには、代わりに:=を使用する必要があります。

1> Henry8 = #{ class => king, born => 1491, died => 1547 }. 
#{born => 1491,class => king,died => 1547} 
2> #{ born := B } = Henry8. 
#{born => 1491,class => king,died => 1547} 
3> B. 
1491 

これは、「パターンのマップ」hereに記載されています。

0

のコード例は、テキストが先行した地図
のフィールド我々は、マップリテラルで使用される:=構文をマッチング

パターンは、マップパターンとしても使用することができます。

そして、そのテキストは、マップを構築する際に=>:=との違いを説明するセクション全体が先行したので、次の2つの異なる構文を知っていたはずです。本の中で

、例の2行目は言う:あなたが入力したシェルではまだ

2> #{born := B} = Henry8. 

を:

2> #{ born => B } = Henry8. 

私はあなたがもう少し慎重section 5.3を再読し、また読むことをお勧めpertinent section of LYSE(この例を含む):

1> Pets = #{"dog" => "winston", "fish" => "mrs.blub"}. 
#{"dog" => "winston","fish" => "mrs.blub"} 

2> #{"fish" := CatName, "dog" := DogName} = Pets. 
#{"dog" => "winston","fish" => "mrs.blub"} 

7> CatName. 
"mrs.blub" 

8> DogName. 
"winston" 

ここでは、キーの順序にかかわらず、 の時間に任意の数の項目の内容を取得することができます。要素は と=>で設定され、:=と一致することに注意してください。 :=演算子を使用して、マップ内の既存のキーを更新することもできます。

関連する問題