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