我是斯卡拉的新手,
val data = Map("test" -> data1,
"cat" -> None,
"myList" -> Map("test2" -> data2, "test3" -> data3))
val output = data.map(x =>
if (x._2.isInstanceOf[Map[String, Any]]) (x._1 -> Some(x._2))
else x)
Map(test -> data1,
cat -> None,
myList -> Some(Map(test2 -> data2, test3 -> data3)))
val valueToFieldMapping = output(fieldName).get.asInstanceOf[Map[String, String]]
我正在
java.lang.ClassCastException: scala.Some cannot be cast to scala.collection.immutable.Map
如果有人对此有所了解,请帮助我。感谢
答案 0 :(得分:1)
首先,让我们使用>>> import matplotlib.pyplot as plt
>>> g = sns.FacetGrid(tips, col="time", row="smoker")
>>> g = g.map(plt.hist, "total_bill")
清除output
的定义:
mapValues
然后这样做
val output = data.mapValues(x =>
if (x.isInstanceOf[Map[String, Any]]) Some(x)
else x)
在创建val valueToFieldMapping = output(fieldName).asInstanceOf[Option[Map[String, String]]].get
时,您无法在get
上调用Some
,因为编译不知道它是output
。
说了这么多,评论是正确的,说使用Option
和Any
真的很难看,所以你需要找到一种更好的方式来表达你想做的事情。至少,使用asInstanceOf
而不是match
,以便在对象不是您认为的情况下实现错误情况。
答案 1 :(得分:0)
问题在于你在Object的实例上没有.get属性。 如果要使用.get方法,则不需要.get然后执行output.get(fieldName)
using (var conn = new NpgsqlConnection(_connectionString))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "CALL MyInsert('4','5','2013-04-04')";
cmd.ExecuteNonQuery();
}
conn.Close();
}
val valueToFieldMapping = output(fieldName).get.asInstanceOf[Map[String, String]]
为您提供了output.get(fieldName)
,并且您正在尝试将对象转换为Option[Object]
的实例
没有从Option到map的隐式转换,这就是你得到错误的原因:
Map[String, String]
或者你可以这样做:
java.lang.ClassCastException: scala.Some cannot be cast to scala.collection.immutable.Map