加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 有状态函数管道

发布时间:2020-12-16 18:21:13 所属栏目:安全 来源:网络整理
导读:代码解释了自己. val s = Seq(1,1,1)val res: Seq[Int] = s.map(...) .check(count how many 1s,if 2 throw Exception) .map(...) 我正在寻找这个检查功能的简单解决方案. 我可以使用map和closure来计算和抛出,但我想要纯粹的功能. 我可以使用过滤器和大小或
代码解释了自己.

val s = Seq(1,1,1)
val res: Seq[Int] = s.map(...)
                     .check(count how many 1s,if > 2 throw Exception)
                     .map(...)

我正在寻找这个检查功能的简单解决方案.

>我可以使用map和closure来计算和抛出,但我想要纯粹的功能.
>我可以使用过滤器和大小或减少,但它返回一个值,而不是使用以下地图可恢复.

如何为管道创建纯粹的有状态检查管道?

解决方法

一种解决方案是模式匹配,因此检查将变为:

> Seq(1,1) match {
    case ls if (ls.count(_ == 1) <= 2) => ls
    case _ => throw new Exception("oh no!")
  }
List(1,1): Seq[Int]


> Seq(1,1) match {
    case ls if (ls.count(_ == 1) <= 2) => ls
    case _ => throw new Exception("oh no!")
  }
java.lang.Exception: oh no!
  $.<init>(Main.scala:177)
  $.<clinit>(Main.scala:-1)

可能最好返回Option类型(而不是抛出):

> Seq(1,1) match {
    case ss if (ss.count(_ == 1) <= 2) => Option(ss)
    case _ => None
  }
None: Option[Seq[Int]]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读