地图与功能中的anys连接之间的差异

时间:2015-05-11 10:59:07

标签: scala

我有一系列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声明和函数声明中使用连接表达式有什么不同吗?

1 个答案:

答案 0 :(得分:0)

这将有效:

Map(
  "the_geom" -> ("CDB_LatLng(" + row(2).toString() + ", " + row(3).toString() + ")")
)

您正尝试使用与某些字符串连接的元组"the_geom" -> "CDB_LatLng("来实例化Map,因为合成函数+将假定双方都表示为String,如果没有另行指定。 getGeom的功能范围为您提​​供了此范围,为您节省了资格。如果将字符串连接包装在括号中,则将在元组操作之前计算其中的值。在这种情况下,只需从左到右阅读,这是有道理的。