Scala - 从 List Companion 对象创建方法

Scala - make method from List Companion Object

我看到 List.make 在这里被调用 http://aperiodic.net/phil/scala/s-99/p12.scala

但是我已经使用 padTo 解决了这个问题,因为 make 已经不存在了

  def decode[A](listOfTuples: List[(Int, A)]): List[Any] = {
    listOfTuples flatMap {
      x => Nil.padTo(x._1,x._2)
    }
  }

那么,我是不是听错了?

这样可以吗?

def decode[A](listOfTuples: List[(Int, A)]): List[A] = {
  listOfTuples flatMap { case (n, e) => 
    List.fill(n)(e)
  }
}

解决方案可能是使用列表中的 fill 方法。解决方法如下图:

scala> val l1 = List((4, 'a'), (1, 'b'), (2,'c'))
l1: List[(Int, Char)] = List((4,a), (1,b), (2,c))

scala> def decode[A](l: List[(Int, A)]): List[A] = {
     | l flatMap { e => List.fill(e._1)(e._2)}
     | }
decode: [A](l: List[(Int, A)])List[A]

scala> decode[Char](l1)
res60: List[Char] = List(a, a, a, a, b, c, c)

希望对您有所帮助!!

List.make 自 Scala 2.8.0 起被弃用,取而代之的是 List.fill。您使用 padTo 的方法是正确的,只是不够直观。

def decode[A](listOfTuples: List[(Int, A)]): List[A] = {
  listOfTuples flatMap {
    x => List.fill(x._1)(x._2)
  }
}

请注意,我将 Any 替换为类型参数 A