# <span class="fa-stack"><i class="fa-solid fa-circle fa-stack-2x"></i><i class="fa-solid fa-robot fa-stack-1x fa-inverse"></i></span> Example - :fa fa-terminal: In Scala 3, implement a function to add two integer numbers. * :fa fa-comment-dots: ```scala def add(a: Int, b: Int): Int = { a + b } ``` * :fa fa-bolt-lightning: [Is this really a function or rather a method?](https://docs.scala-lang.org/tour/basics.html#methods) ---
# <span class="fa-stack"><i class="fa-solid fa-circle fa-stack-2x"></i><i class="fa-solid fa-book fa-stack-1x fa-inverse"></i></span> Curried Methods <div class="grid grid-cols-2 gap-4"> <div> ```scala def add(x:Int)(y:Int) = x+y add(11)(21) ``` </div> <div> ```scala add: (x: Int)(y: Int)Int res: Int = 32 ``` </div> </div> - This is a [curried](https://en.wikipedia.org/wiki/Currying) definition - It is a _method_ that - Takes an Int - Returns a method of type `(y:Int)Int` - So together the type of the method is `add2: (x:Int)(y:Int)Int` ---
# <span class="fa-stack"><i class="fa-solid fa-circle fa-stack-2x"></i><i class="fa-solid fa-book fa-stack-1x fa-inverse"></i></span> Functions <div class="grid grid-cols-2 gap-4"> <div> ```scala val add = (x:Int, y:Int) => x+y add(11, 21) ``` </div> <div> ```scala add: (Int, Int) => Int = $$Lambda$4576/0x00000008018d1840@6ae4d2ad res: Int = 32 ``` </div> </div> - This is a _function_ that - Takes a pair of `Int`s - Returns an `Int` ---
# <span class="fa-stack"><i class="fa-solid fa-circle fa-stack-2x"></i><i class="fa-solid fa-book fa-stack-1x fa-inverse"></i></span> Functions as Objects <div class="grid grid-cols-2 gap-4"> <div> ```scala def a (x:Int) = x + 1 val b = (x:Int) => x + 1 //[Arg,Result] val c = new Function[Int,Int] { def apply(x:Int) = x + 1 } //[Argument, Result] val d : PartialFunction[Matchable, Int] = { case i: Int => i + 1 } val fs = List(a,b,c,d) for f <- fs yield f(4) ``` </div> <div> ```scala fs: List[Int => Int] = List($$Lambda$, $$Lambda$, <function1>, <function1>) res1: List[Int] = List(5, 5, 5, 5) ``` </div> </div> - What's going on here? * [Functions vs Methods](https://jim-mcbeath.blogspot.com/2009/05/scala-functions-vs-methods.html) ---