私は2種類のマップmap1
とmap2
を持っていて、いずれもタイプが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.Map
の
get(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))
}
}
シナリオは私の端に再現できていないようです。コンパイラはこれに同意しません。 –
@SarveshKumarSinghあなたが4月に私の編集を見たかどうかわかりません。今は再現可能です。あなたはReactormonkの答えに同意しますか?質問を閉じることができますか? –