我在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括号等等,但我得到的是关于如何从中删除括号的帖子代码,而不是输出。
答案 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)
发生以下情况:
println
只需要一个参数。此外,在Scala中,可以在没有括号的情况下调用具有一个参数的函数。这意味着println
将其后面的所有内容解释为一个参数并在其周围添加括号,并且您的命令将被翻译为:
println((“Blabla something:”,3))
当赋予println
的参数不是String时,它通过调用toString
方法转换为String,该方法存在于每个对象(以一种或另一种形式)。对于一个元组(在这个例子中是println
的参数),默认的toString
方法只是将元组打印为一对值,用引号括起来,这正是你所看到的。