Scala 使用长字符串作为右值定义映射[Int,String]

Scala 使用长字符串作为右值定义映射[Int,String],scala,Scala,我试图使用字符串literal的串联 作为映射[Int,String]定义中的值: scala> val m: Map[Int, String] = Map(1 -> "a" + "b") 但是我从sbt控制台得到以下错误 <console>:7: error: type mismatch; found : String required: (Int, String) val m: Map[Int, String] = Map(1 -> "a

我试图使用字符串literal的串联 作为
映射[Int,String]
定义中的值:

scala> val m: Map[Int, String] = Map(1 -> "a" + "b")
但是我从
sbt控制台得到以下错误

<console>:7: error: type mismatch;
 found   : String
 required: (Int, String)
       val m: Map[Int, String] = Map(1 -> "a" + "b")
无需为每个代码段定义一个字符串作为映射权限值


有没有办法做到这一点?

您只是缺少一些括号:

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

您只是缺少一些括号:

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

“可能”?肯定!啊,是的,现在我想起来了,这个错误很有道理,“可能”?肯定!啊,是的,现在我想起来了,这个错误让人感觉很好,很多人认为SQL字符串构造是很差的形式。如果你想把一个ID映射到一个函数,你可以这样做:函数是Scala中的值,所以你可以把它们存储在你的地图中,就像一个旁白一样,很多人认为SQL字符串构造是很差的形式。如果您想将一个id映射到一个函数,您可以这样做:函数是Scala中的值,所以您可以将它们存储在map-like中