如何在Scala中打印任何列表?

del*_*ber 23 scala

目前我有一个打印Ints的方法

def printList(args: List[Int]): Unit = {
  args.foreach(println)
}
Run Code Online (Sandbox Code Playgroud)

如何修改它以便它足够灵活地打印任何列表?

Kev*_*ght 48

您不需要专用方法,所需的功能已经在集合类中:

println(myList mkString "\n")
Run Code Online (Sandbox Code Playgroud)

mkString有两种形式,所以对于List("a", "b", "c"):

myList.mkString("[",",","]") //returns "[a,b,c]"
myList.mkString(" - ") // returns "a - b - c"
//or the same, using infix notation
myList mkString ","
Run Code Online (Sandbox Code Playgroud)

我的例子只是用作\n分隔符并将结果字符串传递给println


Ale*_*nov 23

由于println对什么作品:

def printList(args: List[_]): Unit = {
  args.foreach(println)
}
Run Code Online (Sandbox Code Playgroud)

或者更好,所以你不仅限于List:

def printList(args: TraversableOnce[_]): Unit = {
  args.foreach(println)
}
Run Code Online (Sandbox Code Playgroud)

  • 如果由于协方差可以使用"Any",为什么要使用存在类型(`_`)?我认为`TraversableOnce [Any]`更清晰. (10认同)

Tho*_*ney 8

您只需要使方法通用

def printList[A](args: List[A]): Unit = {
  args.foreach(println)
}
Run Code Online (Sandbox Code Playgroud)