我有一系列Type Any元素。我使用一些值将它们连接到地图声明中的一行中的String:
val mapRequest = Map(
"the_geom" -> "CDB_LatLng(" + row(2).toString() + ", " + row(3).toString() + ")"
)
这给了我一个我不理解的错误:
[error] /path/to/file/Signal.scala:92: type mismatch;
[error] found : String
[error] required: (?, ?)
当我将该连接放在一个函数中并使用它时:
val mapRequest = Map(
"the_geom" -> Utils.getGeom(row(2), row(3))
)
函数getGeom的定义如下:
def getGeom(lat:Any, lon:Any) : String = {
return "CDB_LatLng(" + lat.toString() + ", " + lon.toString() + ")"
}
一切正常。
你能解释一下在Map声明和函数声明中使用连接表达式有什么不同吗?
答案 0 :(得分:0)
这将有效:
Map(
"the_geom" -> ("CDB_LatLng(" + row(2).toString() + ", " + row(3).toString() + ")")
)
您正尝试使用与某些字符串连接的元组"the_geom" -> "CDB_LatLng("
来实例化Map,因为合成函数+
将假定双方都表示为String,如果没有另行指定。 getGeom
的功能范围为您提供了此范围,为您节省了资格。如果将字符串连接包装在括号中,则将在元组操作之前计算其中的值。在这种情况下,只需从左到右阅读,这是有道理的。