我试图使用字符串连字符串联
作为Map[Int, String]
定义中的值:
scala> val m: Map[Int, String] = Map(1 -> "a" + "b")
但是我从sbt console
<console>:7: error: type mismatch;
found : String
required: (Int, String)
val m: Map[Int, String] = Map(1 -> "a" + "b")
我想要做这样的事情的原因是因为我想要从id定义映射到某些代码,如下所示:
Map(1 -> s"""SELECT year, COUNT(*) FROM""" +
s""" (SELECT id, YEAR(pb_date) AS year FROM Publications) AS Res1""" +
s"""GROUP BY year;""")
无需为每个代码片段定义一个字符串,作为Map右值。
有没有办法实现这个目标?
答案 0 :(得分:5)
你只是遗漏了一些括号:
scala> val m: Map[Int, String] = Map(1 -> ("a" + "b"))
m: Map[Int,String] = Map(1 -> ab)
您具体获得该错误的原因是因为->
优先于+
,这意味着您实际获得(1 -> "a") + b
,如下所示:
scala> 1 -> "a" + "b"
res4: String = (1,a)b