web-dev-qa-db-ja.com

「andThen」を理解する

andThenに遭遇しましたが、正しく理解できませんでした。

さらに詳しく調べるために、 Function1.andThen docsを読みました。

_def andThen[A](g: (R) ⇒ A): (T1) ⇒ A
_

mmMultiMap インスタンスです。

_scala> mm
res29: scala.collection.mutable.HashMap[Int,scala.collection.mutable.Set[String]] with scala.collection.mutable.MultiMap[Int,String] = 
                    Map(2 -> Set(b) , 1 -> Set(c, a))

scala> mm.keys.toList.sortWith(_ < _).map(mm.andThen(_.toList))
res26: List[List[String]] = List(List(c, a), List(b))

scala> mm.keys.toList.sortWith(_ < _).map(x => mm.apply(x).toList)
res27: List[List[String]] = List(List(c, a), List(b))
_

注-コード 実行中のDSL

andThenは強力ですか?この例に基づくと、_mm.andThen_がx => mm.apply(x)に糖分を除去しているように見えます。 andThenのより深い意味がある場合、私はまだそれを理解していません。

21
Kevin Meredith

andThenは単なる関数合成です。与えられた関数f

_val f: String => Int = s => s.length
_

andThenは、fの後に引数関数を適用する新しい関数を作成します

_val g: Int => Int = i => i * 2

val h = f.andThen(g)
_

h(x)g(f(x))になります

27
Lee