Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在模式匹配中记录警告而不返回任何警告

在模式匹配中记录警告而不返回任何警告
EN

Stack Overflow用户
提问于 2020-03-03 08:35:34
回答 2查看 67关注 0票数 1

我有一个可以迭代的数组,我试图将其转化为case类,并且我正在对它们进行映射。在数组不可转换到case类的情况下,我希望记录一个警告并继续映射。但是,当我实现警告时,返回类型会从Iterable[MyCaseClass]更改为Iterable[Any],这不是我想要的。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
case class MyCaseClass(s1: String, s2: String)
object MyCaseClass {
  def apply(sa: Array[String]) = new MyCaseClass(sa(0), sa(1))
}

val arrayIterable: Iterable[Array[String]] = Iterable(Array("a", "b"), Array("a", "b", "c"))

def badReturnType(): Iterable[Any] = { // Iterable[Any] is undesireable
  arrayIterable map {
    case sa: Array[String] if sa.length == 2 => MyCaseClass(sa)
    case _ => println("something bad happened!") // but warnings are good
  }
}

def desiredReturnType(): Iterable[MyCaseClass] = { // Iterable[MyCaseClass] is desireable
  arrayIterable map {
    case sa: Array[String] if sa.length == 2 => MyCaseClass(sa)
    // but no warnings if things go wrong!
  }
}

我想编写一个符合以下条件的函数:

将每个元素转换为MyCaseClass

  • log警告时,当我得到一个不能转换为MyCaseClass

  • after记录警告的数组时,传递给匹配条件的数组是ignored/discarded

  • the返回类型应该是Iterable[MyCaseClass].

我怎样才能满足这些条件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-03 08:48:39

考虑使用List而不是Array,并尝试将OptionflatMap结合起来

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
l flatMap {
  case e if e.length == 2 => Some(MyCaseClass(e))
  case e => println(s"$e is wrong length"); None
}

另一种方法是partitionMap

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val (lefts, rights) = l.partitionMap {
  case e if e.size == 2 => Right(MyCaseClass(e))
  case e  => Left(s"$e is wrong length")
}

lefts.foreach(println)
rights
票数 5
EN

Stack Overflow用户

发布于 2020-03-03 08:56:13

你可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final case class MyCaseClass(s1: String, s2: String)

def parse(input: Array[String]): Either[String, MyCaseClass] = input match  {
  case Array(s1, s2) => Right(MyCaseClass(s1, s2))
  case _ => Left(s"Bad input: ${input.mkString("[", ", ", "]")}")
}

def logErrors(validated: Either[String, _]): Unit = validated match {
  case Left(error) => println(error)
  case Right(_)    => ()
}

def validateData(data: IterableOnce[Array[String]]): List[MyCaseClass] =
  data
    .iterator
    .map(parse)
    .tapEach(logErrors)
    .collect {
      case Right(value) => value
    }.toList

你可以这样用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val arrayIterable = Iterable(Array("a", "b"), Array("a", "b", "c"))
validateData(arrayIterable)
// Bad input: [a, b, c]
// res14: List[MyCaseClass] = List(MyCaseClass("a", "b"))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60511735

复制
相关文章
vue前端怎么导出图片_VUE中将页面导出为图片或者PDF
1.将页面html转换成图片 npm install html2canvas –save
全栈程序员站长
2022/09/01
2.6K0
[答疑]EA画的图如何能够导出成矢量文件
请教各位一个EA软件的使用问题。我用EA画的图如何能够导出成矢量文件?我的甲方非要把图导到CAD里,输出dwg文件。
用户6288414
2022/05/27
7380
[答疑]EA画的图如何能够导出成矢量文件
在Linux中将目录压缩打包为zip文件 并通过ftp上传的Shell脚本
下面的shell脚本是将/opt下yyyymmdd格式的目录压缩打包为bak_yyyymmdd.zip,并通过ftp上传到192.168.0.2上的bak目录下。
魏杰
2022/12/23
1.7K0
VSCode Markdown文件导出为pdf
1. 安装VSCode插件 ---- 打开VSCode,按F1 输入ext install,选择安装扩展 搜素markdown pdf,安装插件 2. 编辑.md文件 ---- 后缀名为.md ### 1. 表格 --- | 1 | 2 | 3 | | --- | --- | --- | | a | b | c | | d | e | f | ### 2. 有序列表 --- * 1 * 2 * 3 * 31 * 32 ### 3. 超链 --- [baidu](https://w
山海散人
2021/03/03
15.7K0
Pygal,可导出矢量图的Python可视化利器
Python有很多优秀的可视化库,其中有名的像matplotlib、seaborn、plotly,可以绘制出各式绚丽的图表。
DataCharm
2021/02/22
1.2K0
Pygal,可导出矢量图的Python可视化利器
Python导出Excel文件
这里用到Python的xlwt模块,逐行读取文本内容,插入到Excel里面,最后成功导出
py3study
2020/01/09
1.4K0
typecho文章批量导出为md文件
2.使用文本编辑器打开converter.php将上方代码中 $db->connect('localhost','数据库用户名','数据库密码','数据库用户名'); 的信息更改为你自己的数据库信息
迷路的朱朱
2023/05/07
7210
Pygal,可导出矢量图的Python可视化利器
Python有很多优秀的可视化库,其中有名的像matplotlib、seaborn、plotly,可以绘制出各式绚丽的图表。
朱卫军 AI Python
2022/04/03
7920
Pygal,可导出矢量图的Python可视化利器
在Python中处理CSV文件的常见问题
当谈到数据处理和分析时,CSV(Comma-Separated Values)文件是一种非常常见的数据格式。它简单易懂,可以被绝大多数编程语言和工具轻松处理。在Python中,我们可以使用各种库和技巧来处理CSV文件,让我们一起来了解一些常见问题和技巧吧!
华科云商小孙
2023/09/25
3910
Python爬取网页中表格数据并导出为Excel文件
本文使用自己创建的网页进行模拟和演示,在爬取真实网页时,分析网页源代码然后修改代码中的正则表达式即可。
Python小屋屋主
2018/09/20
3.1K0
Python爬取网页中表格数据并导出为Excel文件
3D场景编辑导出-LayaAir引擎Unity插件使用详解
有开发者问过LayaAir引擎是否会有自己的3D场景编辑器,首先可以肯定的讲,一定会有。3D编辑器是LayaAir3.x引擎规划的基础组成部分(3.x正在研发中)。
Layabox Charley
2020/08/31
4.7K0
3D场景编辑导出-LayaAir引擎Unity插件使用详解
使用POI组件导出数据为Excel文件
以下例子为HR系统中一个员工管理模块,导出员工数据为Excel文件的功能。 系统结构为:Struts2+MyBaties+Spring3+MySQL HTML、JS: <input type="
张张
2019/12/26
9440
Elasticsearch使用:索引数据导出为CSV文件
这样我们的 Elasticsearch 中就会有我们的 eCommerce 索引了。
HLee
2021/01/19
3.3K0
Elasticsearch使用:索引数据导出为CSV文件
数据库分批导出为csv文件
boss需要1500万个手机号码,导出为excel文件 由于数量太大,直接存一个文件,打开电脑会直接卡死。 需要分为15批,每批100万。 可以手工在navicat软件上面运行,根据MySQL分页公式 (page-1)*page_size,page_size 也即是(当前分页-1)*每页数量,每页数量 示例sql: select mobile from tbl_sms LIMIT 0,1000000 第二页 select mobile from tbl_sms LIMIT 1000000,1000000 .
py3study
2018/08/02
2.9K0
语雀文档批量导出为Markdown文件
语雀的定位由之前的社区转向工具,也不提供批量导出Markdown的功能,有开发者提供了导出脚本可以通过语雀官方API帮我们把文档批量导出为Markdown,方便我们把文档导入notion等其他平台或者备份在本地,以备不时之需
KenTalk
2023/04/07
3.1K0
语雀文档批量导出为Markdown文件
使用Workbench导出为【sql】脚本文件
选定单选按钮【Export to self-Contained File】,并点击右侧的【...】,选择【桌面】路径,输入文件名称【T1】,点击保存。
红目香薰
2022/11/29
1.5K0
使用Workbench导出为【sql】脚本文件
教程:为Linux系统导出内核头文件
最近由于项目需要,要编译mlibc,其中需要linux kernel headers,而使用apt安装的头文件总是有问题,因此,自己从内核里面导出了一份。在此写个简单的文章记录一下。
灯珑LoGin
2023/10/18
9680
Rust 中将 markdown 渲染为 html
轻量级标记语言 markdown 现今不仅在程序员范围内流行,很多的其它行业人员也对 markdown 青睐有加。因此现在的 web 应用中,富文本编辑器越来越多的支持 markdown 语法格式,以及即时渲染功能。在存储时,数据库中存入轻量级标记语言 markdown 文档,方便后续导出再做它用的排版。也可以直接数据库中存入渲染后的 html 文档,对 API 调用者提供方便(如格式和验证等)。
niqin.com
2022/06/30
1.9K0
Rust 中将 markdown 渲染为 html
在 Python 中将数值变量转换为分类变量
这篇文章是今天发布的CTGAN的补充,我们可以使用pandas的cut函数将数据进行离散化、将连续变量进行分段汇总,这比写自定义函数要简单的多。
deephub
2021/11/16
2.1K0
点击加载更多

相似问题

SceneKit:将场景导出为STL文件以进行3D打印?

20

在Python中将嵌套列表导出为excel文件

10

在Python中将角度和速度转换为3d矢量

11

如何导出vpython图片

114

从three.js场景导出为SVG或其他矢量格式

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文