繁体   English   中英

Scala 2.11中List()的扩展功能缺少参数类型

[英]Missing parameter type for expanded function for List() in Scala 2.11

我有这个隐式课程

object ListUtils {    
  /** adds methods to the List class */
  implicit class EnhancedList[A](val l: List[A]) extends AnyVal {

  /** splits this list into multiple sub-lists using the specified function --- splits after each element where the function is true */
  def splitWhere(f: A => Boolean): List[List[A]] = {
      @tailrec def splitAgain(list: List[A], result: List[List[A]]): List[List[A]] = list match {
        case Nil => result
        case _ => {
          if (list.exists(f(_))) {
            val (nextSubList, restOfOriginalList) = list.splitAt(list.indexWhere(f(_)) + 1)
            splitAgain(restOfOriginalList, nextSubList :: result)
          } else list :: result
        }
      }
      splitAgain(l, Nil).reverse
    }
  }
}

它与

val list = List("1", "2", "3", "x", "4", "5", "x", "6", "7", "8", "9", "x")
val splitList = list.splitWhere(_ == "x")

但是,在我将scala从2.10.3更新到2.11.4之后,这将导致出现一个空列表,并出现错误“缺少扩展功能的参数类型”

scala> List().splitWhere(_ == 1)
<console>:14: error: missing parameter type for expanded function ((x$1)=> x$1.$eq$eq(1))
              List().splitWhere(_ == 1)

似乎类型推断不适用于List [Nothing]。 如果我使用它会很好

List[Any]().splitWhere(_ == "x")

我想知道如何正确编写隐式函数以支持List()上的操作。 提前致谢!

您可以在其类型参数中声明implicit class EnhancedList[A]协变量,然后让EnhancedList[Nothing]视为EnhancedList[Any] 这样您可以编译代码,但是在编译时收到以下警告:

警告:使用'=='比较Nothing和String类型的值将始终生成false List()。splitWhere(_ ==“ x”)

因此可能存在问题。 小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM