首页 > 解决方案 > Seq[Any] 上的 scala 中的模式匹配

问题描述

我不是 scala 专家,但我想避免使用 asInstanceOf 并将其替换为序列的模式匹配。以下剪断给了我一个错误non-variable type argument

val seq : Seq[Any] = getSeq();

val rec = seq match {
      case rec: Seq[Record[Key, Value]] => rec
      case other => throw new Exception(s"Expected a Seq[Record[Key, Value]]")
}

我有以下代码可以使用asInstanceOf,但想替换它:

val values = seq.asInstanceOf[Seq[Record[Key, Vrade]]].map(_.value)

标签: scala

解决方案


您可以将元素映射到类型为 Seq[Record[Key, Vrade]] 的新列表。因此,不是匹配整个序列,而是匹配列表中的元素。

它会是这样的:

val values = seq.map {
    case x: Record[Key, Vrade]] => Some(x);
    case _ => None;
};

然后,如果您将变量作为 List 而不是 og Seq,那么您可以将其展平或将其展平


推荐阅读