Scala println在输出中添加括号

时间:2014-06-22 22:08:18

标签: scala

我在scala中采取了我的第一步,这是一个" hello world" -like code:

package test
object Main {
def main(args: Array[String]): Unit = {
        println("Blabla something : " + 3)
        println("Blabla something : " , 3)
    }
}

以下是我得到的输出:

Blabla something : 3
(Blabla something : ,3)

为什么在第二行打印括号,以及"," ? 我期待与第一行相同的输出。

注意 :我尝试搜索 scala println括号等等,但我得到的是关于如何从中删除括号的帖子代码,而不是输出。

3 个答案:

答案 0 :(得分:6)

要查看此操作,您可以在REPL中执行以下操作:

scala> import scala.reflect.runtime.universe.TypeTag
scala> def printz[T](x: T)(implicit tT: TypeTag[T]) = { val v = x; println(s"$v : $tT")}

scala> printz("Blabla something : " , 3)
(Blabla something : ,3) : TypeTag[(String, Int)]

TypeTag[(String, Int)]提示元组(String, Int)

答案 1 :(得分:2)

逗号具有特殊含义。由于逗号,编译器将println("Blabla something : " , 3)的参数解释为Tuple。特别是,类型(String, Int)

答案 2 :(得分:1)

致电时

println("Blabla something : " , 3)

发生以下情况:

  1. println只需要一个参数。此外,在Scala中,可以在没有括号的情况下调用具有一个参数的函数。这意味着println将其后面的所有内容解释为一个参数并在其周围添加括号,并且您的命令将被翻译为:

    println((“Blabla something:”,3))

  2. 当赋予println的参数不是String时,它通过调用toString方法转换为String,该方法存在于每个对象(以一种或另一种形式)。对于一个元组(在这个例子中是println的参数),默认的toString方法只是将元组打印为一对值,用引号括起来,这正是你所看到的。