2017-04-26 15 views
0

私は2種類のマップmap1map2を持っていて、いずれもタイプがMap[String, MyType]です。2つのパラメータを持つmap.getはなぜ可能ですか?

map1.getOrElse(name, map2.getOrElse(name, defVal))

:私がやりたいこと

が、見つからない場合は、二番目に検索し、それでも見つからない場合は、デフォルト値を使用して最初のマップのキーを探して、でしたしかし、私が誤って書いたのは、

map1.getOrElse(name, map2.get(name, defVal))です。

驚いたことに、私はgetを2つのパラメータで呼んでいましたが、驚いたことに、これはコンパイル時エラーを引き起こさなかった(そしてnullを返しました)。

私はIDE(Eclipseの)で見ることができるように、それは私が二番目のパラメータでmap2.getを呼び出すときに代わりにget(key : String) : Option[MyType]

scala.collection.MapLikeののなぜそれは、エラーを報告しません、 java.util.Mapget(x$1 : Any) : MyTypeを呼び出しますか?私がドキュメントで見る限り、 map.getは1つのパラメータしか取っていませんか? 2つのパラメータをタプルなどと解釈します(このタプルを Any -parameterとして使用します)。

関連する場合、MyTypeは、参照番号Java-プロジェクトのクラスです。

私はスカラでは新しく静かなので、これが些細なことや私が逃した基本的なコンセプト(そして、スケーラプログラミングは誰もが知っているはずです)なら、何を検索するか教えてください。

EDIT:

私がコメントで見たように、問題は私が参照するJavaベースのプロジェクトからコレクションを取得するので、私は、import scala.collection.javaConversions._をHAVAことを、私が見た、再生可能ではないこと。今、それはまた、このような短いコードで再現可能です:

import scala.collection.JavaConversions._ 
object Main { 
    def main (args : Array[String]) : Unit = { 
    val map1 = Map("1" -> 2) 
    val map2 = Map("2" -> 1) 
    map1.getOrElse("1", map2.get("2", 0)) 
    } 
} 
+0

シナリオは私の端に再現できていないようです。コンパイラはこれに同意しません。 –

+0

@SarveshKumarSinghあなたが4月に私の編集を見たかどうかわかりません。今は再現可能です。あなたはReactormonkの答えに同意しますか?質問を閉じることができますか? –

答えて

2

map2.get(name, defVal)からmap2.get((name, defVal))に引数適応することがございます。

編集:JavaConvertersを使用してください。 JavaConversionsは推奨されていません。

0

まあ...私はあなたがこの作品を作ったかどうかは分かりませんが、それは可能ではありません。

それは(少なくともスカラ座2.12.1で)まだなんとかではありません

scala> val map1 = Map("1" -> "!", "2" -> "@") 
map1: scala.collection.immutable.Map[String,String] = Map(1 -> !, 2 -> @) 

scala> val map2 = Map("3" -> "#", "4" -> "$") 
map2: scala.collection.immutable.Map[String,String] = Map(3 -> #, 4 -> $) 

scala> val s = map1.getOrElse("3", map2.get("3", "%")) 
<console>:13: error: too many arguments (2) for method get: (key: String)Option[String] 
     val s = map1.getOrElse("3", map2.get("3", "%")) 
               ^
+0

質問の編集セクションでは、scala.collection.JavaConversionsのインポートを実行すると(少なくとも私のIDEで)動作します。私の例を試してコンパイルして実行できます。 –

+0

真。 'JavaConversions'は、期待された振る舞いを壊すようなこのような問題のために単に廃止されました。 –

関連する問題