我正在尝试学习scalaz验证,并给出了以下代码:
AuthorValidator.validate(author) match {
case scalaz.Success(authorValidated) => onSuccess(authorService.addAuthor(authorValidated)) { extract: Int =>
complete(StatusCodes.OK -> extract+"")
}
case scalaz.Failure(failure) => complete(StatusCodes.Accepted, failure mkString "/") // this piece won't work
}
}我想从failure : NonEmptyList[String]获取格式化字符串。基本上,我不能使用mkString。你知道斯卡拉斯是否提供了某种方式来格式化NEL?
发布于 2017-03-08 18:33:52
NonEmptyList只是一个额外保证(非空)的列表,因此您可以安全地将其转换为普通Scala List,以便使用像mkString这样的方法。
import scalaz.NonEmptyList, scalaz.syntax.foldable._
def formatNel(nel: NonEmptyList[String]): String = nel.toList.mkString("/")foldable语法导入通过Foldable实例为NonEmptyList提供了toList方法。您还可以首先使用nel.list.toList将其转换为scalaz.IList,但这有点冗长,对于大型列表(我不太确定)可能效率较低。
还有很多其他方法可以直接编写它,而无需转换为Scala列表。一种方法是转换为IList,然后使用intersperse和suml
import scalaz.NonEmptyList, scalaz.std.string._, scalaz.syntax.foldable._
def formatNel(nel: NonEmptyList[String]): String = nel.list.intersperse("/").suml但是,对于像字符串格式这样的东西,我可能会坚持使用toList.mkString,因为它是清晰的、熟悉的,而且可能更有效率,因为它比suml更不通用(尽管在大多数情况下这不太重要)。
https://stackoverflow.com/questions/42667947
复制相似问题