如何在scala中解决类型错配问题?

问题描述 投票:0回答:1

我需要一些帮助,在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
  }
}
scala types tree fold
1个回答
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) => ???
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.