## Thursday, November 5, 2009

### Function._

If you have not looked at the Function object I would recommend you do. It contains several useful methods for combining and converting functions.

Examples:
`cala> def twoParamFunc( i:Int, j:String) = println(i,j)twoParamFunc: (i: Int,j: String)Unit// the tupled method converts the function with n parameters into// a function that takes one tupleNscala> val tupled = Function tupled twoParamFunc _tupled: ((Int, String)) => Unit = < function1>scala> tupled (1 -> "one") (1,one)// A practical use-case is to convert an existing method// for use with a Map// Example with out using the tupled methodscala> Map( 1 -> "one", 2 -> "two") map (entry => twoParamFunc(entry._1, entry._2)) (1,one)(2,two)res5: scala.collection.immutable.Iterable[Unit] = List((), ())// example using tupledscala> Map( 1 -> "one", 2 -> "two") map (tupled)  (1,one)(2,two)res7: scala.collection.immutable.Iterable[Unit] = List((), ())// and for balance the oppositescala> val untupled = Function untupled tupleParamFunc _untupled: (Int, String) => Unit = < function2>scala> untupled(1, "one") tuple = (1,one)// Chain is for chaining together an arbitrary number of functionsscala> def inc(i:Int) = i + 1 inc: (i: Int)Intscala> def double(i:Int) = i*idouble: (i: Int)Intscala> def decr(i:Int) = i - 1decr: (i: Int)Intscala> (Function chain List(inc _, double _, decr _, double _, inc _, inc _))(3)res10: Int = 227// Now examples curries two methods then chains them together// define basic methodsscala> def inc(step:Int,i:Int) = i + step inc: (step: Int,i: Int)Intscala> def multiply(i:Int, j:Int) = i * jmultiply: (i: Int,j: Int)Int// Convert them to methods where the first argument is 3scala> val inc3 = (Function curried inc _)(3)inc3: (Int) => Int = < function1>scala> val multiplyBy3 = (Function curried multiply _)(3)multiplyBy3: (Int) => Int = < function1>// chain the resulting Function1 objects together and execute chain with parameter 3// (3 + 3)*3 = 18scala> chain(List(inc3, multiplyBy3))(3)res12: Int = 18`

#### 1 comment:

1. Jesse, just wanted to stop by to say your blog must be one of the best around. By now I stopped counting how many times I was searching for an answer on a Scala topic and found it right here on your blog. Thanks!