Scala - сделать метод из List Companion Object - PullRequest
0 голосов
/ 05 марта 2020

Я вижу, что здесь вызывается 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)
    }
  }

Итак, я правильно понял?

Ответы [ 3 ]

4 голосов
/ 05 марта 2020

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.

1 голос
/ 05 марта 2020

Решением может быть использование метода 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)

Надеюсь, это поможет !!

0 голосов
/ 05 марта 2020

Это нормально?

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