可能性の重複さ:
Scala map containing mix type valuesScalaの同じタイプのキーでマップが、値の値およびサブタイプのための不規則なタイプと自身が不規則
私は、以前のグルーヴィーの状況を持っていますプログラムは次のような構造を構築しています。
mp = [k1: "string", k2: [d1: [1,2,3], d2: 1975], k3: 345, k4: ["one","two"]]
to:
[String: String, String: Map[String, Any], String: Int, String: List[String]]
この関数は、呼び出し関数にmpを返します。
あなたがmpマップの値が不規則であることがわかるように。私はスカラでプログラムを書き直しています。
scalaでは、mpをMap [String、Any]として表現する必要がありますが、mpを使用するテストコードではisInstanceOfとasInstanceOfでダンスを演奏します。その結果、多くのスカラー定型文が生成されます。 ScalaがList [String]をAnyにキャストすることができないという不満の主な理由は、例えばAnyにキャストできません。
スカラーには優れたソリューションがありますか?
もっと慎重に見ると、この質問は前の質問とは異なります。この質問では、キーk2の値[d1:[1,2,3]、d2: "string"]がそれ自体が不規則なマップであることがわかります。
私は、このソリューションを提案しました: のような他のScalaのクラスを作成します。テストコードで
class MakeMap {
// lot of code here
....
val k1: String = // put here value found in logic above
val k2 : Map[String, Any] // here is the issue, I am again forced to use Any
val k3 : List[String] // put here value found in logic above
}
:Scalaのユーザーに
val m1 = new MakeMap()
m1.k1 // very easy to access value, also gets rid of scala verbose syntax to access vale
// in map like getOrElse
m1.k2 // this is the issue, it seesm I have to define yet another class
m1.k3 // again easy
この質問と[あなたの前の質問]の違いは何ですか(http://stackoverflow.com/q/6584840/390581)?ちなみに、あなたは、異なるタイプの*値*を意味します。あなたの鍵はすべて弦であるようです。 –
あなたはList [String]を任意のものに変換できるので、エラーメッセージを投稿してください...あなたがScalaでより良いソリューションを望むなら、Javaまたは動的言語からソリューションを直接移譲するのを止めなければなりません。キーと値の制約について詳しく述べると、Scalaの適切なソリューションを見つけるのに役立つかもしれません。 – paradigmatic
申し訳ありませんこれは私の以前の質問に似ていることを認識していませんでした。私は別の文脈を見ているときにこの質問をしています。この質問を削除してください。私の脳はスカラーによって部分的に傷ついています:) – rjc