|> in Scala
F# の |> を Scala でやってみた。
scala> class Holder[A](a:A) { | def |>[B](f:A => B) = f(a) | } defined class Holder scala> implicit def any2holder[A](a:A) = new Holder(a) any2holder: [A](a: A)Holder[A] scala> val succ = (x:Int) => x + 1 succ: (Int) => Int = <function1> scala> 3 |> succ |> succ res0: Int = 5 scala> 3 |> { (x:Int) => x * 2 } |> succ res1: Int = 7
お、これは・・・
scala> 3 |> { | case x => x * 2 | } res2: Int = 6 scala> 3 match { | case x => x * 2 | } res3: Int = 6
おお!match と同じように使える!
- 追記
scala> class Holder[A](a:A) { | def |>[B](f:A=>B) = f(a) | def <|:[B](f:A=>B) = f(a) | } defined class Holder scala> implicit def any2holder[A](a:A) = new Holder(a) any2holder: [A](a: A)Holder[A] scala> val succ = (x:Int) => x + 1 succ: (Int) => Int = <function1> scala> succ <|: succ <|: 10 res0: Int = 12 scala> val tw = (x:Int) => x * 2 tw: (Int) => Int = <function1> scala> succ <|: succ <|: 10 |> tw |> tw res1: Int = 48 scala> tw <|: tw <|: 10 |> succ |> succ res2: Int = 42
おー!