println(a.apply(1))
println(b.apply(2))
println(a(1))
println(b(2))
val c
:Int
=> Int
= (x
:Int
) => x +
1 val d
:Function1
[Int, Int
] = (x
:Int
) => x +
1
val e
= (x
:Int, y
:Int
) => x + y +
10 val f
:(Int, Int
) => Int
= e
val g
:Function2
[Int, Int, Int
] = e
def applyFunction
(x
:Int, fn
:Int
=> Int
) = fn
(x
) //FUNCTIONAL PROGRAMMING
println(applyFunction(3, c))
println(applyFunction(10, (x:Int) => x * x)) //Inline funciton
def applyAnythingFunction
[A, B
](x
:A, fn
:A
=> B
):B
= fn
(x
)
println(applyAnythingFunction(3, c))
val h
= (t
:(Int, Int, Int
)) => t.
_1 + t.
_2 + t.
_3
println(applyAnythingFunction((3, 5, 10), h))
}
class Person
(firstName
:String, lastName
:String
) extends Human
{ }
def fullName
= "The magnificent Madan" }
println(i.fullName)
val j
= new Function
[Int, Int
] { def apply
(x
:Int
):Int
= x +
1 }
println(applyFunction(10, j))
//def returningFunctions(x:Int) = (y:Int) => 19 + y + x
//This is a method that takes an argument and returns a function
//This is also a closure,
def returningFunctions
(x
:Int
):(Int
=> Int
) = { }
println(returningFunctions(4)(10))
}
b2JqZWN0IE1haW4gZXh0ZW5kcyBBcHAgewoJdmFsIGEgPSh4OkludCkgPT4geCArIDEKdmFsIGIgPSB7eDpJbnQgPT4geCArIDF9CgpwcmludGxuKGEuYXBwbHkoMSkpCnByaW50bG4oYi5hcHBseSgyKSkKcHJpbnRsbihhKDEpKQpwcmludGxuKGIoMikpCgp2YWwgYzpJbnQgPT4gSW50ID0gKHg6SW50KSA9PiB4ICsgMQp2YWwgZDpGdW5jdGlvbjFbSW50LCBJbnRdID0gKHg6SW50KSA9PiB4ICsgMQoKdmFsIGUgPSAoeDpJbnQsIHk6SW50KSA9PiB4ICsgeSArIDEwCnZhbCBmOihJbnQsIEludCkgPT4gSW50ID0gZQp2YWwgZzpGdW5jdGlvbjJbSW50LCBJbnQsIEludF0gPSBlCgoKZGVmIGFwcGx5RnVuY3Rpb24oeDpJbnQsIGZuOkludCA9PiBJbnQpID0gZm4oeCkgICAvL0ZVTkNUSU9OQUwgUFJPR1JBTU1JTkcKCnByaW50bG4oYXBwbHlGdW5jdGlvbigzLCBjKSkKCnByaW50bG4oYXBwbHlGdW5jdGlvbigxMCwgKHg6SW50KSA9PiB4ICogeCkpICAvL0lubGluZSBmdW5jaXRvbgoKZGVmIGFwcGx5QW55dGhpbmdGdW5jdGlvbltBLCBCXSh4OkEsIGZuOkEgPT4gQik6QiA9IGZuKHgpCgpwcmludGxuKGFwcGx5QW55dGhpbmdGdW5jdGlvbigzLCBjKSkKCnZhbCBoID0gKHQ6KEludCwgSW50LCBJbnQpKSA9PiB0Ll8xICsgdC5fMiArIHQuXzMKCnByaW50bG4oYXBwbHlBbnl0aGluZ0Z1bmN0aW9uKCgzLCA1LCAxMCksIGgpKQoKYWJzdHJhY3QgY2xhc3MgSHVtYW4gewoJZGVmIGZ1bGxOYW1lOlN0cmluZwp9CgpjbGFzcyBQZXJzb24oZmlyc3ROYW1lOlN0cmluZywgbGFzdE5hbWU6U3RyaW5nKSBleHRlbmRzIEh1bWFuIHsKCW92ZXJyaWRlIGRlZiBmdWxsTmFtZSA9IHMiJHtmaXJzdE5hbWV9ICR7bGFzdE5hbWV9Igp9Cgp2YWwgaSA9IG5ldyBIdW1hbiB7CglkZWYgZnVsbE5hbWUgPSAiVGhlIG1hZ25pZmljZW50IE1hZGFuIgp9CgpwcmludGxuKGkuZnVsbE5hbWUpCgp2YWwgaiA9IG5ldyBGdW5jdGlvbltJbnQsIEludF0gewoJZGVmIGFwcGx5KHg6SW50KTpJbnQgPSB4ICsgMQp9CgpwcmludGxuKGFwcGx5RnVuY3Rpb24oMTAsIGopKQoKLy9kZWYgcmV0dXJuaW5nRnVuY3Rpb25zKHg6SW50KSA9ICh5OkludCkgPT4gMTkgKyB5ICsgeAoKCi8vVGhpcyBpcyBhIG1ldGhvZCB0aGF0IHRha2VzIGFuIGFyZ3VtZW50IGFuZCByZXR1cm5zIGEgZnVuY3Rpb24KLy9UaGlzIGlzIGFsc28gYSBjbG9zdXJlLApkZWYgcmV0dXJuaW5nRnVuY3Rpb25zKHg6SW50KTooSW50ID0+IEludCkgPSB7CglyZXR1cm4gKHk6SW50KSA9PiAxOSArIHkgKyB4Cn0KCgpwcmludGxuKHJldHVybmluZ0Z1bmN0aW9ucyg0KSgxMCkpCgp9