【问题标题】:Scala - make method from List Companion ObjectScala - 从列表伴侣对象制作方法
【发布时间】:2020-06-18 05:27:51
【问题描述】:

我看到 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)
    }
  }

那么,我是不是搞错了?

【问题讨论】:

  • ~刚刚怎么样:case (x, y) => List(x, y)~ - 哦等等,这似乎做了一些不同的事情,你能解释一下make以前做什么吗?
  • @LuisMiguelMejíaSuárez 我认为你误解了这个问题。我说的是List.makehere 的存在/不存在。
  • 当您学习教程时,您应该确保使用相同的版本。本教程似乎使用 Scala 2.7。 (2009年写的,当时是现在的版本,所以我相信是用的那个版本。)特别是你这里说的是集合框架的一种方法,集合框架已经完全重新从那以后写了两次。

标签: scala tuples scala-collections


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    解决方案可能是使用列表中的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)
    

    希望对你有帮助!

    【讨论】:

      【解决方案3】:

      这样好吗?

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多