使用长字符串定义Map [Int,String]作为正确的值

时间:2016-06-06 21:51:24

标签: scala

我试图使用字符串连字符串联 作为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右值。

有没有办法实现这个目标?

1 个答案:

答案 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