如果列表不为空,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
}
}
示例用法:mylist.convertOrElse("prefix" + _.mkString(", "), "")
我记得在某处看到过这个,但它可能出现在博客文章或类似的文章中。目前我似乎无法在 scalaz 中找到它,但我什至无法在网上找到最近的 scalaz 文档(这是一个不同的问题 :)
如您所见,我已经编写了自己的隐式,但是当适当的 scalaz 导入可以解决问题时,我讨厌添加自己的隐式。