首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scalaz验证NEL mkString

Scalaz验证NEL mkString
EN

Stack Overflow用户
提问于 2017-03-08 09:49:09
回答 1查看 536关注 0票数 2

我正在尝试学习scalaz验证,并给出了以下代码:

代码语言:javascript
复制
          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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-08 18:33:52

NonEmptyList只是一个额外保证(非空)的列表,因此您可以安全地将其转换为普通Scala List,以便使用像mkString这样的方法。

代码语言:javascript
复制
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,然后使用interspersesuml

代码语言:javascript
复制
import scalaz.NonEmptyList, scalaz.std.string._, scalaz.syntax.foldable._

def formatNel(nel: NonEmptyList[String]): String = nel.list.intersperse("/").suml

但是,对于像字符串格式这样的东西,我可能会坚持使用toList.mkString,因为它是清晰的、熟悉的,而且可能更有效率,因为它比suml更不通用(尽管在大多数情况下这不太重要)。

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

https://stackoverflow.com/questions/42667947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档