首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >处理Scalaz6验证列表

处理Scalaz6验证列表
EN

Stack Overflow用户
提问于 2013-01-09 10:46:37
回答 1查看 1.2K关注 0票数 8

有没有一种惯用的方法来处理Scalaz6中的验证集合?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val results:Seq[Validation[A,B]]
val exceptions = results.collect{case Failure(exception)=>exception}
exceptions.foreach{logger.error("Error when starting up ccxy gottware",_)}
val success = results.collect{case Success(data)=>data}
success.foreach {data => data.push}
if (exceptions.isEmpty)
   containers.foreach( _.start())

我可以考虑在对结果进行循环时使用折叠键,但是最终的测试呢?

EN

回答 1

Stack Overflow用户

发布于 2013-01-09 11:55:13

处理验证列表的通常方法是使用sequence将列表转换为Validation[A, List[B]],如果在此过程中出现任何错误,则该列表将为空(即Failure)。

Validation进行排序会在左侧类型的半组中累积错误(与立即失败的Either相反)。这就是为什么您经常看到使用ValidationNEL (其中NEL代表NonEmptyList)而不是简单地使用Validation。例如,如果你有这样的结果类型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import scalaz._, Scalaz._

type ExceptionsOr[A] = ValidationNEL[Exception, A]

以及一些结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val results: Seq[ExceptionsOr[Int]] = Seq(
  "13".parseInt.liftFailNel, "42".parseInt.liftFailNel
)

排序将为您提供以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scala> results.sequence
res0: ExceptionsOr[Seq[Int]] = Success(List(13, 42))

如果我们有一些像这样的错误,另一方面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val results: Seq[ExceptionsOr[Int]] = Seq(
  "13".parseInt.liftFailNel, "a".parseInt.liftFailNel, "b".parseInt.liftFailNel
)

我们最终会得到一个Failure (请注意,我已经重新格式化了输出,使其在这里清晰可读):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scala> results.sequence
res1: ExceptionsOr[Seq[Int]] = Failure(
  NonEmptyList(
    java.lang.NumberFormatException: For input string: "a",
    java.lang.NumberFormatException: For input string: "b"
  )
)

因此,在您的示例中,您应该编写如下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val results: Seq[ValidationNEL[A, B]]

results.sequence match {
  case Success(xs) => xs.foreach(_.push); containers.foreach(_.start())
  case Failure(exceptions) => exceptions.foreach(
    logger.error("Error when starting up ccxy gottware", _)
  )
}

有关sequenceValidation的更多详细信息,请参阅my answers herehere

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14233511

复制
相关文章
Selenium处理下拉列表
在执行Selenium自动浏览器测试时,很多时候需要处理下拉菜单。下拉菜单通常用于表单中,在节省空间和防止用户在表单中选择错误的选项时非常有用。因此在测试任何网站或访问表单时,如何使用Selenium处理下拉列表显得尤为重要。
FunTester
2020/07/22
6.1K0
使用xmllint处理/验证xml
xmllint是一个很方便的处理及验证xml的工具,linux下只要安装libxml2就可以使用这个命令,下面整理一些常用功能
跑马溜溜的球
2020/12/07
1.7K0
Python笔记(二):列表+列表数据处理+函数
#才疏学浅,难免有不恰当之处,请不吝指正,谢谢。 #适合初学者。     列表的数据自下而上堆放(形成一个堆栈),类似于其他编程语言的数组。例如: user = ["张三","李四","王五"] 王五 李四 张三 使用[]中括号偏移量访问列表数据: print(user[0])        输出: 张三 print(user[1])        输出:李四 print(user[2])        输出:王五 (一)列表常用的一些方法: append() :在
free赖权华
2018/04/27
8840
python列表处理效率对比测试
Python列表添加元素效率测试 #!/usr/bin/env import datetime class adair: def test1(n): lst=[] for i in range(n*10000): lst = lst + [i] return lst def test2(n): for i in range(n*10000): lst = lst.append(i
py3study
2020/01/13
4810
[接口测试_B] 10 requests处理SSL证书验证
可以看到,将verify设为False后,可以跳过ssl验证,但存在一个告警信息InsecureRequestWarning。要忽略这个告警信息可以怎么做呢?
苦叶子
2018/07/25
1.8K0
[接口测试_B] 10 requests处理SSL证书验证
java javaGui事件处理用户验证
package mmm; import java.awt.Dimension; import java.awt.Frame; import java.awt.Toolkit; import java.awt.GridLayout; import java.awt.Panel; import java.awt.Label; import java.awt.FlowLayout; import java.awt.TextField; import java.awt.Button; import java.aw
葫芦
2019/05/09
6490
Opencv:验证码图像处理
首先安装 opencv :(点击链接查看) https://blog.csdn.net/weixin_43582101/article/details/88660570
李玺
2021/11/22
4710
Opencv:验证码图像处理
简单的注册模块表单验证处理
表单具有 onsubmit = "return check()"行为,处理验证情况
书童小二
2018/09/03
3.3K0
简单的注册模块表单验证处理
验证码的处理 google recaptcha
google验证码的第三方处理 #经过批量测试,成功率高达百分之九十,1000个邮箱大概4美金,比较实惠 第一部分. 通过请求youtube简介页面,获取网红的channel_id和页面产生的ses
用户8346838
2021/03/10
1.4K0
PHP 后端表单验证和请求处理
创建好前端的联系表单视图后,接下来,我们来编写提交表单后后端的 PHP 处理逻辑。
学院君
2020/09/28
2.6K0
PHP 后端表单验证和请求处理
Java对List列表进行分组处理(对List列表固定分组/对List列表平均分组)
将一组数据平均分成n组 即:数据分组数固定为N,每组数据个数不定,每组个数由List列表数据总长度决定 /** * 将一组数据平均分成n组 * * @param source 要分组的数据源 * @param n 平均分成n组 * @param <T> * @return */ public static <T> List<List<T>> averageAssign(List<T> source, int n) { List<List<T>> result = new Ar
目的地-Destination
2023/03/06
3.5K0
Pandas的列表值处理技巧,避免过多循环加快处理速度
这里有一些技巧可以避免过多的循环,从而获得更好的结果 图1 -标题图像。 您曾经处理过需要使用列表的数据集吗?如果有,你就会明白这有多痛苦。如果没有,你最好做好准备。 如果你仔细看,你会发现列表无
deephub
2020/10/19
1.9K0
Pandas的列表值处理技巧,避免过多循环加快处理速度
Vue基础:条件渲染、列表渲染、事件处理
那么在上面的代码中切换 loginType 将不会清除用户已经输入的内容。因为两个模板使用了相同的元素, 不会被替换掉——仅仅是替换了它的 placeholder。
奋飛
2021/08/30
7850
Python中的数据处理(列表)——(二)
Q1:上次留了一个问题,那就是元组中的数据是不可变的,那么列表中的元素可以改变吗?
Gorit
2021/12/09
1.3K0
Python中的数据处理(列表)——(二)
【译】在列表视图中处理空值
本篇文章主要针对两类开发者。第一个是曾遇到过IllegalArgumentException: Path must not be empty问题的开发者。第二个则是当ListView使用了未被完整加载的图像,应用程序仍能正确运转的开发者们。
小鄧子
2018/08/20
1.2K0
python处理列表和字典的小技巧
一、获取字典中value最大对应的key key = max(my_dict, key=my_dict.get) 例子 二、 从列表或字典中随机选取一个元素 import random 2.1 从列表中随机选取一个元素 random_value = random.choice(my_list) 2.2 从字典中随机选取一个元素的键或值 random_key = random.choice( list( my_dict.keys() ) ) random_value = random.choice(
SL_World
2021/09/18
1.1K0
【说站】python处理数字列表的函数
(1)range()函数的参数不仅包括开始位置和终止位置,还指定步骤长度,也就是说,我们可以使用该函数生成等参数列。
很酷的站长
2022/11/23
6290
【说站】python处理数字列表的函数
8.13 Selenium Cookie与验证码处理
不少网站在用户登录、用户提交信息等登录和输入的页面上使用了验证码技术。验证码技术可以有效防止恶意用户对网站的滥用,使得网站可以有效避免用户信息失窃、保证网站稳定安全性。
清风穆云
2021/08/09
6290
Python实战图片验证码降噪处理
图片验证码算是网络数据采集上的一道拦路虎,虽然有诸多公开的ORC接口、云打码平台,一旦大规模应用起来,还是内部写程序进行识别处理比较好。
州的先生
2019/11/06
3.2K0
Vue基础:条件渲染、列表渲染、事件处理
那么在上面的代码中切换 loginType 将不会清除用户已经输入的内容。因为两个模板使用了相同的元素,<input> 不会被替换掉——仅仅是替换了它的 placeholder。
奋飛
2019/08/15
1.9K0

相似问题

客户端验证不处理分组列表

11

Symfony验证处理

20

文件处理验证

20

PDO处理验证

10

表单验证错误验证不处理

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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