scala - 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)
解决方案
您可以将元素映射到类型为 Seq[Record[Key, Vrade]] 的新列表。因此,不是匹配整个序列,而是匹配列表中的元素。
它会是这样的:
val values = seq.map {
case x: Record[Key, Vrade]] => Some(x);
case _ => None;
};
然后,如果您将变量作为 List 而不是 og Seq,那么您可以将其展平或将其展平
推荐阅读
- http - 使用其 IP 地址从浏览器访问 GCE Windows Sever 2019 虚拟机
- javascript - 如何将数据参数添加到 HTML 字符串并返回字符串?
- c - 关于Producer-Consumer程序写入文件的问题
- python - 用于注册和登录的 Django 不同的 USERNAME 字段
- shell - 有没有办法在 Ubuntu WSL 中使用“Ctrl-Shift-(箭头键)”突出显示整个单词?
- apache - 如何在同一个 apache 网络服务器上运行 mod-mono 和 php
- continuous-integration - GitLab CI 登录到没有 DinD 的私人仓库
- html - 如何在 Angular 中动态更改环境变量?
- javascript - 未从 omdbapi.com 获取数据
- python - 根据一帧的行值和另一帧的列值合并两个数据帧