Skip to content

Commit 1230a84

Browse files
committed
Converting Methods to Functions
1 parent ad69caf commit 1230a84

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

Functions/MethodsToFunctions.scala

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* Methods can be converted into functions using partially applied functions
3+
* Use an '_' to turn method parameters into function parameters
4+
* If '_' is last character in method parameter, you can remove '_'
5+
*
6+
* */
7+
8+
class Summer(x:Int)
9+
{
10+
def addSingleInt(y:Int) = x + y
11+
12+
def addTwoInts(y:Int, z:Int) = x + y + z
13+
}
14+
15+
class FunctionExecutor(z:Int)
16+
{
17+
def runSingleParamFn(f:Int => Int) = f(z)
18+
19+
def runTwoParamFn(f:(Int, Int) => Int) = f(z, 10)
20+
}
21+
22+
object MethodsToFunctions extends App
23+
{
24+
val x = new Summer(10)
25+
val singleFn = x.addSingleInt _
26+
27+
println("singleFn.apply(20) : " + singleFn.apply(20))
28+
println("singleFn(20) : " + singleFn(20))
29+
30+
val z = new FunctionExecutor(20)
31+
println("z.runSingleParamFn(singleFn) : " + z.runSingleParamFn(singleFn))
32+
println("z.runSingleParamFn(x.addSingleInt _) :" + z.runSingleParamFn(x.addSingleInt _))
33+
println("z.runSingleParamFn(x.addSingleInt) :" + z.runSingleParamFn(x.addSingleInt))
34+
35+
val f2 = x.addTwoInts(40, _:Int) //_ means parameter will be provided later
36+
println("z.runSingleParamFn(f2) : " + z.runSingleParamFn(f2))
37+
println("z.runTwoParamFn(x.addTwoInts) : " + z.runTwoParamFn(x.addTwoInts))
38+
39+
}
40+
41+
/**
42+
* Sample Output
43+
singleFn.apply(20) : 30
44+
singleFn(20) : 30
45+
z.runSingleParamFn(singleFn) : 30
46+
z.runSingleParamFn(x.addSingleInt _) :30
47+
z.runSingleParamFn(x.addSingleInt) :30
48+
z.runSingleParamFn(f2) : 70
49+
z.runTwoParamFn(x.addTwoInts) : 40
50+
51+
*/

0 commit comments

Comments
 (0)