首页 > 解决方案 > fpscala:序列()函数中的模式匹配错误

问题描述

我正在关注 Scala 中的函数式编程一书并解决问题 4.4。

即使我从答案键复制并粘贴了代码并且我不确定如何解决,我仍然收到错误消息。

  def sequence[A](a: List[Option[A]]): Option[List[A]] = a match {
    case Nil => Some(Nil)
    case h :: t => h.flatMap(hh => sequence(t).map(hh :: _))
  }

错误:

Error:(45, 12) constructor cannot be instantiated to expected type;
 found   : scala.collection.immutable.::[A]
 required: List[Option[?A1]] where type ?A1 <: A (this is a GADT skolem)
    case h :: t => h.flatMap(hh => sequence(t).map(hh :: _))

似乎是什么问题?

编辑:似乎问题是因为我List在同一目录下的不同文件中定义了。我怎样才能使用这个文件scala.List而不是我定义的List

标签: scala

解决方案


仅隐藏您的自定义List类:

import custom.{List => _}

List在从包中导入其他所有内容时隐藏您的实现custom

import custom.{List => _, _}

或者你可以反之亦然 - 在导入时给一个类一个新名称(或别名):

import scala.collection.immutable.{List => RenamedList}

scala.List并参考RenamedList


推荐阅读