What are closures?
We'll solve the problem in the previous section using closures. But first, let's explain the concept of a closure. In programming terminology, a closure has more than one definition:
- A closure is simply a function value that gets created at runtime and encompasses a reference to a free variable that's not in the local scope
- A closure in practical terms is a function that you can pass around that retains the same scope and values as the ones it had at the time of creation
What do we mean by these statements? Let's check that using a very simple, but a fun example:
object AClosure extends App { var advertisement = "Buy an IPhone7" val playingShow = (showName: String) => println(s"Playing $showName. Here's the advertisement: $advertisement") playingShow("GOT") advertisement = "Buy an IPhone8" playingShow("GOF") }
The result is as follows:
Playing GOT. Here's the advertisement: Buy an IPhone7 Playing GOF. Here's the advertisement: Buy an IPhone8
So,...