2016-04-01 15 views
2

私はScalaの初心者です。
マップ操作についてこのコードを読んでいますが、どのように動作するのか理解できません。スカラの地図とペアの操作

val terms = Map (1 -> 1.0, 2-> 2.0) 
val (exp, coeff) = (2, 4.0) 
exp -> (coeff + terms(exp)) //> res: (Int, Double) = (2,6.0) 
coeff + terms(exp) //> res: Double = 6.0 

私は、3行目は、おそらく、map関数を適用
が、右手側は明らかに数だと思います。
なぜ出力がペアになっていますか?

ありがとうございました。

答えて

4
val (exp, coeff) = (2, 4.0) 

これはデコンストラクタであり、それは名前expcoeffに値24.0を割り当てます。 exp2coeffは今や4.0です。

terms(exp) 

これは矢印->は、ペアを構成する短手用語2.0

exp -> (coeff + terms(exp)) 

もたらすマップルックアップです。 coeff + terms(exp)6.0であるため、値は26.0です。

+0

ああ、私はそれを得ます。 '1 - > 0.2' は作成するでしょう '(Int、Double)=(1、0.2) ' ありがとう! –

+0

問題ありません。 –

1

terms(exp)2.0

(coeff + terms(exp))に解決する、マップ検索で左右のオペランドのペアを構築->従って4.0 + 2.0

exp -> (coeff + terms(exp))において矢印です。

2

terms(exp)は、expで定義されたキーで「マップオブジェクト」termsの値にアクセスします。

これとは対照的に、「マップ方式」の使い方は次のようになります。

val list = List(1, 2, 3, 4) 
val double = (i: Int) => i * 2 
val list2 = list.map(double) 
printf(list2.toString) 

list.map(double)は、リストのすべてのメンバーのためのdouble関数リテラルを実行し、新しいListオブジェクトをバック与えます。

印刷出力は次のようになります。

List(2, 4, 6, 8)