【问题标题】:missing parameter type scala缺少参数类型 scala
【发布时间】:2020-08-04 02:51:25
【问题描述】:

我在 scala 中输入了以下内容:

def count(e: Int, list: List[Int]): Int = 
   list.foldLeft(e)((sum) => list match {
     case x::xs if e == x => sum = sum + 1
     case Nil             => sum
   })

为什么我在第二行“缺少参数类型”上出现错误?

【问题讨论】:

  • 代码高亮做得好!请更完整地发布您的编译器输出,例如error: wrong number of parameters; expected = 2 和其余部分。通常它可以让人们更好地理解问题。还要指定你把这段代码放在哪里——它是 Scala REPL(交互式命令行评估)还是你编译的 scala 文件?
  • 谢谢!这是 Scala REPL

标签: scala types parameters method-missing


【解决方案1】:

试试这个:

 val r = List(1,2,3,4,3,3,3,3,3,3,4,4,5)
  def newCount(e: Int, list: List[Int]) = {
    list.foldLeft(0)((sum: Int, b: Int) =>{
      if(b==e)
        sum+1
      else sum
    }
    )
  }

  println(newCount(3, r)) // 7

所以你的代码的问题是你使用 foldLeft 的方式你没有提供匿名函数的第二个参数。因此,您定义的函数缺少类型参数。

在您的代码中,您尝试使用 sum 作为累加器,因此您不需要编写 sum = sum + 1 您可以只编写 sum + 1 但最重要的是您没有以正确的方式使用左折叠。

foldLeft 的签名来自文档here

def foldLeft[B](z: B)(op: (B, A) => B): B

其中z是初始值和一个函数op,它在(B类型的累加器,A类型的变量)上运行并返回B。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-23
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多