fork download
  1. object Main extends App {
  2. val a =(x:Int) => x + 1
  3. val b = {x:Int => x + 1}
  4.  
  5. println(a.apply(1))
  6. println(b.apply(2))
  7. println(a(1))
  8. println(b(2))
  9.  
  10. val c:Int => Int = (x:Int) => x + 1
  11. val d:Function1[Int, Int] = (x:Int) => x + 1
  12.  
  13. val e = (x:Int, y:Int) => x + y + 10
  14. val f:(Int, Int) => Int = e
  15. val g:Function2[Int, Int, Int] = e
  16.  
  17.  
  18. def applyFunction(x:Int, fn:Int => Int) = fn(x) //FUNCTIONAL PROGRAMMING
  19.  
  20. println(applyFunction(3, c))
  21.  
  22. println(applyFunction(10, (x:Int) => x * x)) //Inline funciton
  23.  
  24. def applyAnythingFunction[A, B](x:A, fn:A => B):B = fn(x)
  25.  
  26. println(applyAnythingFunction(3, c))
  27.  
  28. val h = (t:(Int, Int, Int)) => t._1 + t._2 + t._3
  29.  
  30. println(applyAnythingFunction((3, 5, 10), h))
  31.  
  32. abstract class Human {
  33. def fullName:String
  34. }
  35.  
  36. class Person(firstName:String, lastName:String) extends Human {
  37. override def fullName = s"${firstName} ${lastName}"
  38. }
  39.  
  40. val i = new Human {
  41. def fullName = "The magnificent Madan"
  42. }
  43.  
  44. println(i.fullName)
  45.  
  46. val j = new Function[Int, Int] {
  47. def apply(x:Int):Int = x + 1
  48. }
  49.  
  50. println(applyFunction(10, j))
  51.  
  52. //def returningFunctions(x:Int) = (y:Int) => 19 + y + x
  53.  
  54.  
  55. //This is a method that takes an argument and returns a function
  56. //This is also a closure,
  57. def returningFunctions(x:Int):(Int => Int) = {
  58. return (y:Int) => 19 + y + x
  59. }
  60.  
  61.  
  62. println(returningFunctions(4)(10))
  63.  
  64. }
Success #stdin #stdout 0.39s 322176KB
stdin
Standard input is empty
stdout
2
3
2
3
4
100
4
18
The magnificent Madan
11
33