如果列表不为空,scala或scalaz中是否有函数将函数应用于列表.否则它会返回一些默认值.该函数必须应用于列表本身而不是列表的元素.也就是说,它完成以下任务:
implicit class RichList[A, M[A] <: Iterable[A]](list: M[A]) {
def convertOrElse[B](fn: M[A] => B, whenEmpty: B) = {
if (!list.isEmpty) fn(list) else whenEmpty
}
}
Run Code Online (Sandbox Code Playgroud)
用法示例:mylist.convertOrElse("prefix"+ _.mkString(","),"")
我记得在某个地方看过这个,但它可能是在博客文章或其他一些.我现在似乎无法在scalaz中找到它,但我甚至无法在网上找到最新的scalaz文档(这是一个不同的问题:)
正如你所看到的,我已经编写了我自己的隐含,但是我讨厌在适当的scalaz导入可以解决这个问题时添加我自己的含义.
你应该可以使用NonEmptyListScalaz 的功能,如下所示:
import scalaz._
import Scalaz._
val list = List()
val str = list.toNel.map(_.list.mkString(",")).getOrElse("empty")
println(str)
Run Code Online (Sandbox Code Playgroud)
在我的例子中,你会看到"空"这个词打印出来.如果您将列表定义更改为:
val list = List("foo", "bar")
Run Code Online (Sandbox Code Playgroud)
然后你会看到"foo,bar"打印出来.
| 归档时间: |
|
| 查看次数: |
739 次 |
| 最近记录: |