【问题标题】:How to solve type missmatch in scala如何解决scala中的类型不匹配
【发布时间】:2020-08-21 18:01:41
【问题描述】:

我需要一些关于 scala 代码的帮助,我想实现 foldL 方法但我得到了这个:

asd.scala:73: error: type mismatch;
 found   : Option[MyTree[A]] => B
 required: B
      def myFoldLeft[B](z: B)(op: (B, A) => B): B = (_:Option[MyTree[A]]) match {
                                                                          ^
one error found

我知道那是类型不匹配,但我是 scala 和定向对象的新手,我不知道 了解如何解决这种情况。

class MyTree[A](val value: A, val left:Option[MyTree[A]],
                              val right:Option[MyTree[A]]) {

  def myFoldLeft[B](z: B)(op: (B, A) => B): B = (_:Option[MyTree[A]]) match {
    case Some(tree) => right.get.myFoldLeft (left.get.myFoldLeft (op(z, value)) (op)) (op)
    case None => z
  }
}

【问题讨论】:

  • 您的myFoldLeft 正在返回一个函数 Option[MyTree[A]] => B,而不是您说它会返回的B。原因是这样的:(_:Option[MyTree[A]]) 下划线延伸到(x :Option[MyTree[A]]) => x match。我相信你想要的只是this.match,但它不是和Option。您可能需要重新考虑您的功能。

标签: scala types tree fold


【解决方案1】:

(_:Option[MyTree[A]]) ... 是一个 lambda。

你应该像这样匹配

class MyTree[A](val value: A, val left:Option[MyTree[A]],
                val right:Option[MyTree[A]]) {    
  def myFoldLeft[B](z: B)(op: (B, A) => B): B = (left, right) match {
    case (Some(left), Some(right)) => ???
    case (Some(left), None) => ???
    case (None, Some(right)) => ???
    case (None, None) => ???
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-20
    • 2015-08-18
    • 1970-01-01
    • 2018-01-30
    • 2017-01-02
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    相关资源
    最近更新 更多