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

Sim*_*lbc 0 scala

我正在尝试使用字符串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右值的代码片段定义字符串.

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

eva*_*man 5

你只是遗漏了一些括号:

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)

  • "大概"?明确! (3认同)