scala> //Currying helps to call a method by using Curly Braces scala> //instead of parenthesis. This will make the code scala> //much more cleaner ; especially when we are passing scala> //Function Literals #214 scala> scala> //NOTE : A function with only Single Parameter scala> // can be called either using Parenthesis scala> // or Curly Braces scala> scala> /***************************************************** | * Example 1 : A function without 'Currying' | *****************************************************/ | import scala.io.Source import scala.io.Source scala> def fileFilter (fileName:String, | filterOp:String => Boolean) | : List[String] = { | var filteredLines = List[String]() | for (line <- Source.fromFile(fileName).getLines) { | //println("line -> " + line) | if (filterOp(line) == true) { | filteredLines = line :: filteredLines | }else { | | } | } | filteredLines | } fileFilter: (fileName: String, filterOp: String => Boolean)List[String] scala> scala> //Calling the function using Parenthesis scala> val filteredLines:List[String] = | fileFilter("data.csv", (x:String) => | if(x.contains("hello")){ | true | }else { | false | }) //Parenthesis is used filteredLines: List[String] = List(Another hello scala, hello scala) scala> println("filteredLines -> " + filteredLines) filteredLines -> List(Another hello scala, hello scala) scala> scala> //Calling the function using Curly braces do scala> //not work scala> val filteredLines:List[String] = | fileFilter{"data.csv", (x:String) => <console>:2: error: ';' expected but ',' found. fileFilter{"data.csv", (x:String) => ^ scala> if(x.contains("hello")){ | true | }else { | false | } <console>:41: error: not found: value x if(x.contains("hello")){ ^ scala> } //Curly Braces is used <console>:1: error: eof expected but '}' found. } //Curly Braces is used ^ scala> scala> scala> scala> /***************************************************** | * Example 2 : A function with 'Currying' | *****************************************************/ | import scala.io.Source import scala.io.Source scala> //A Curried function containing 2 argument list with scala> //each list containing a single parameter scala> def fileFilter (fileName:String) | (filterOp:String => Boolean) | : List[String] = { | var filteredLines = List[String]() | for (line <- Source.fromFile(fileName).getLines) { | //println("line -> " + line) | if (filterOp(line) == true) { | filteredLines = line :: filteredLines | }else { | | } | } | filteredLines | } fileFilter: (fileName: String)(filterOp: String => Boolean)List[String] scala> scala> //Calling the function using Curly Braces scala> val filteredLines:List[String] = | fileFilter("data.csv"){ x:String => | if(x.contains("hello")) { | true | }else { | false | } | } //Curly braces is used filteredLines: List[String] = List(Another hello scala, hello scala) scala> println("filteredLines -> " + filteredLines) filteredLines -> List(Another hello scala, hello scala)