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)