如何正确连接字符串?

时间:2016-09-03 18:53:49

标签: string scala

我写了以下简单程序

object Main extends App {
    println(new MyClass toString)
}

class MyClass {
    var pairs: Map[String, String] = Map[String, String](
       "key1" -> "value1", 
       "key2" -> "value2", 
       "key3" -> "value3"
    )
    val Separator = "separator"

    override def toString = {
        pairs map { case (key, value) => s"$key=$value" } mkString(" ") + Separator
    }
}

DEMO

我认为该程序会打印key1=value1 key2=value2 key3=value3 separator。但它确实没有。相反,它打印:

key1=value1 separatorkey2=value2 separatorkey3=value3

为什么呢?我以为我首先构建了地图的字符串表示,然后将separator添加到表示中。

1 个答案:

答案 0 :(得分:0)

一个非常严重的建议::尽管Scala允许您以更英语的方式编写代码,list map { case a => a toString }而不是list.map({ case a => a.toString }),但只有在不明确的情况下才能执行此操作。

或者我甚至会说完全不这样做。你写代码不是诗歌。

这里你的问题是由于没有正确使用括号而scala误解了你的意图。

// this line of yours
pairs map { case (key, value) => s"$key=$value" } mkString(" ") + Separator

//is understood by Scala as
(pairs map { case (key, value) => s"$key=$value" }) mkString " " + Separator

请记住,list.mkString(" " + "ABC")也可以在诗歌类型Scala中写成list.mkString " " + "ABC"

// so... if you want your result then better write things clearly with parenthesis
((pairs map { case (key, value) => s"$key=$value" }) mkString(" ")) + Separator

// Or just stop writing poetry and start writing code
(pairs.map({ case (key, value) => s"$key=$value" }).mkString(" ")) + Separator