4

リストが空でない場合にリストに関数を適用する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 ドキュメントをオンラインで見つけることさえできません (それは別の問題です :)

ご覧のとおり、私は独自の Implicit を作成しましたが、適切な scalaz インポートでうまくいく場合に、独自の Implicit を追加するのは嫌いです。

4

2 に答える 2

6

NonEmptyList次のように Scalazの機能を使用できるはずです。

import scalaz._
import Scalaz._        
val list = List()    
val str = list.toNel.map(_.list.mkString(",")).getOrElse("empty")
println(str)

私の例では、「空」という単語が出力されます。リスト定義を次のように変更した場合:

val list = List("foo", "bar")

すると、「foo,bar」が出力されます。

于 2013-09-01T00:19:17.357 に答える